實現一個雙鏈表,雙鏈表初始爲空,支持5種操做:java
(1) 在最左側插入一個數;ui
(2) 在最右側插入一個數;spa
(3) 將第k個插入的數刪除;code
(4) 在第k個插入的數左側插入一個數;xml
(5) 在第k個插入的數右側插入一個數blog
如今要對該鏈表進行M次操做,進行完全部操做後,從左到右輸出整個鏈表。it
注意:題目中第k個插入的數並非指當前鏈表的第k個數。例如操做過程當中一共插入了n個數,則按照插入的時間順序,這n個數依次爲:第1個插入的數,第2個插入的數,…第n個插入的數。io
輸入格式
第一行包含整數M,表示操做次數。table
接下來M行,每行包含一個操做命令,操做命令可能爲如下幾種:class
(1) 「L x」,表示在鏈表的最左端插入數x。
(2) 「R x」,表示在鏈表的最右端插入數x。
(3) 「D k」,表示將第k個插入的數刪除。
(4) 「IL k x」,表示在第k個插入的數左側插入一個數。
(5) 「IR k x」,表示在第k個插入的數右側插入一個數。
輸出格式
共一行,將整個鏈表從左到右輸出。
數據範圍
1≤M≤1000001≤M≤100000
全部操做保證合法。
輸入樣例:
10 R 7 D 1 L 3 IL 2 10 D 3 IL 2 7 L 8 R 9 IL 4 7 IR 2 2
輸出樣例:
8 7 7 3 2 9
思路:雙鏈表初始化,r[0]=1,l[1]=0
刪除操做: 刪除第k個點,r[l[k]]=r[k],l[r[k]]=l[k]
插入操做:在下標爲k的右邊插入一個數;左邊插入一個數至關於在l[k]的右邊插入一個數
r[idx]=r[k]; l[idx]=k; l[r[k]]=idx; r[k]=idx;