acwing 826 單鏈表

2022-09-19 12:39:11 字數 1370 閱讀 7233

實現乙個單鏈表,鍊錶初始為空,支援三種操作:

向煉表頭插入乙個數;

刪除第 k 個插入的數後面的數;

在第 k 個插入的數後插入乙個數。

現在要對該鍊錶進行 m 次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。

注意:題目中第 k 個插入的數並不是指當前鍊錶的第 k 個數。例如操作過程中一共插入了 n 個數,則按照插入的時間順序,這 n 個數依次為:第 1 個插入的數,第 2 個插入的數,…第 n 個插入的數。

輸入格式

第一行包含整數 m,表示操作次數。

接下來 m 行,每行包含乙個操作命令,操作命令可能為以下幾種:

h x,表示向煉表頭插入乙個數 x。

d k,表示刪除第 k 個插入的數後面的數(當 k 為 0 時,表示刪除頭結點)。

i k x,表示在第 k 個插入的數後面插入乙個數 x(此操作中 k 均大於 0)。

輸出格式

共一行,將整個鍊錶從頭到尾輸出。

資料範圍

1≤m≤100000

所有操作保證合法。

輸入樣例:

10

h 9i 1 1

d 1d 0

h 6i 3 6

i 4 5

i 4 5

i 3 4

d 6

輸出樣例:
6 4 6 5
408立大功,複習ds的時候幫我過了一遍靜態鍊錶,恰好用上了

思路根據題目要求,我們需要快速找到所謂的"第k個插入的數",所以可以用陣列儲存這個鍊錶,a[i]表示第i個插入的數,這樣無論是插入還是刪除都十分方便,而靜態鍊錶好像..能用上!(這裡用-1在靜態鍊錶中表示null),注意所有輸入操作都是合法的

做法核心在於:變數i記錄這是第幾個插入的數,並且只會遞增,對於新插入的數直接a[i++].value = x即可

#include using namespace std;

int m, h, i;

struct node nums[100010];

void head(int x)

void del(int k)

void insert(int k, int x)

int main() else if (op == 'd') else

getchar(); // cin >> x dosen't consume "newline" character

}while (h != -1)

}

AcWing 826 單鏈表

實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...

AcWing 826 單鏈表

實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...

AcWing 826 單鏈表

實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...