實現乙個單鏈表,鍊錶初始為空,支援三種操作:
(1) 向煉表頭插入乙個數;
(2) 刪除第k個插入的數後面的數;
(3) 在第k個插入的數後插入乙個數
現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。
注意:題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的時間順序,這n個數依次為:第1個插入的數,第2個插入的數,…第n個插入的數。
第一行包含整數m,表示操作次數。
接下來m行,每行包含乙個操作命令,操作命令可能為以下幾種:
(1) 「h x」,表示向煉表頭插入乙個數x。
(2) 「d k」,表示刪除第k個插入的數後面的數(當k為0時,表示刪除頭結點)。
(3) 「i k x」,表示在第k個插入的數後面插入乙個數x(此操作中k均大於0)。
共一行,將整個鍊錶從頭到尾輸出。
1≤m≤100000
所有操作保證合法。
10
h 9i 1
1d 1
d 0h 6
i 36
i 45
i 45
i 34
d 6
646
5
插入可達到o(1)o(1)
o(1)
的複雜度,注意插入和刪除的過程是a - 1,(插入第乙個點的下標為0則插入第k個點的下標為k-1,即插入k-1後面的乙個結點,要注意在刪除的過程要特判刪除頭結點
if(a == 0) head = ne[head]
)。
#include
using
namespace std;
const
int maxn =
100010
;//頭結點下標,當前節點下標,當前結點的值,next的結點的下標
int head, idx, e[maxn]
, ne[maxn]
;//初始化
void
init()
//在煉表頭插入乙個數
void
insert2head
(int x)
//在第k個數後面插入乙個數
void
insert2k
(int k,
int x)
//將頭結點刪除需要保證頭結點的存在
void
removek
(int k)
intmain()
else
if(op ==
'd')
else
if(op ==
'i')
}for
(int i = head; i !=-1
; i = ne[i]
) cout << e[i]
<<
" ";
cout << endl;
return0;
}
acwing題解
題目鏈結
AcWing 826 單鏈表
實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...
AcWing 826 單鏈表
實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...
acwing 826 單鏈表
實現乙個單鏈表,鍊錶初始為空,支援三種操作 向煉表頭插入乙個數 刪除第 k 個插入的數後面的數 在第 k 個插入的數後插入乙個數。現在要對該鍊錶進行 m 次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第 k 個插入的數並不是指當前鍊錶的第 k 個數。例如操作過程中一共插入了 n 個數,...