實現乙個雙鏈表,雙鏈表初始為空,支援5種操作:
(1) 在最左側插入乙個數;
(2) 在最右側插入乙個數;
(3) 將第k個插入的數刪除;
(4) 在第k個插入的數左側插入乙個數;
(5) 在第k個插入的數右側插入乙個數
現在要對該鍊錶進行m次操作,進行完所有操作後,從左到右輸出整個鍊錶。
注意:題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的時間順序,這n個數依次為:第1個插入的數,第2個插入的數,…第n個插入的數。
輸入格式
第一行包含整數m,表示操作次數。
接下來m行,每行包含乙個操作命令,操作命令可能為以下幾種:
(1) 「l x」,表示在鍊錶的最左端插入數x。
(2) 「r x」,表示在鍊錶的最右端插入數x。
(3) 「d k」,表示將第k個插入的數刪除。
(4) 「il k x」,表示在第k個插入的數左側插入乙個數。
(5) 「ir k x」,表示在第k個插入的數右側插入乙個數。
輸出格式
共一行,將整個鍊錶從左到右輸出。
資料範圍
1≤m≤100000
所有操作保證合法。
輸入樣例:
10r 7
d 1l 3
il 2 10
d 3il 2 7
l 8r 9
il 4 7
ir 2 2
輸出樣例:
8 7 7 3 2 9
#include
#include
using
namespace std;
const
int n =
100010
;int n;
int e[n]
, l[n]
, r[n]
, idx;
//head tail
// 0 1
//0表示左端點,1表示右端點
void
init()
//在下標是k的點的右邊插入乙個x
//若要用addkr在k的左邊插入,則傳入l[k],注意不是k-1!!!!!
void
addkr
(int k,
int x)
void
addkl
(int k,
int x)
//在head頭插乙個值,令head->next == x,其中head就是0
void
addl
(int x)
//在tail尾插乙個值,令tail->prev == x,其中tail就是1
void
addr
(int x)
//刪除下標為k的節點
void
remove
(int k)
intmain()
if(op ==
"il")if
(op ==
"ir")if
(op ==
"r")
if(op ==
"l")
}for
(int i = r[0]
; i !=
1; i = r[i]
) cout << e[i]
<<
' ';
return0;
}
ACWing 827 雙鏈表
實現乙個雙鏈表,初始為空,支援5 55種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k kk個插入的數刪除 4 在第k kk個插入的數左側插入乙個數 5 在第k kk個插入的數右側插入乙個數。現在要對該鍊錶進行m mm次操作,進行完所有操作後,從左到右輸出整個鍊錶。輸入格式 第一行...
AcWing 827 雙鏈表
實現乙個雙鏈表,雙鏈表初始為空,支援5種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k個插入的數右側插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從左到右輸出整個鍊錶。題 目 include define n...
AcWing 827 雙鏈表(C 演算法)
1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k個插入的數右側插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從左到右輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,...