AcWing 827 雙鏈表(C 演算法)

2021-10-08 07:54:02 字數 2205 閱讀 1061

(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

2、基本思想:

①將鍊錶左側標為0,右側標為1,但是這兩點不是鍊錶的節點不存值。

②在下標為q的點右側插值,就是先確定新點的兩邊,再改舊點右邊點的左邊,再改舊點的右邊(後兩步的順序不可替換)。

③在下標為q的點左側插值,相當於在(下標為q的點的左側點)的右側插值。

④刪除鍊錶中的乙個點,令被刪點的右邊等於被刪點的左邊,再令被刪點的右邊等於被刪點的左邊(這兩步順序可替換)。

3、步驟:

①寫好初始化函式、右側插值函式、刪除函式

②主函式按步驟來

#include

using

namespace std;

void

init()

;void

add_r

(int q,

int x)

;void

remove_

(int q)

;const

int n =

100010

;int e[n]

, l[n]

, r[n]

, idx;

//e[q]表示下標為q的點的值,l[n]和r[n]表示下標為q的點左側和右側點的值,idx記錄下標

intmain()

else

if(op ==

"r")

//鍊錶右側插值

else

if(op ==

"d")

//刪除乙個值

else

if(op ==

"il"

)//在某乙個數左側插值

else

//在某乙個數右側插值

}for

(int i = r[0]

; i !=

1; i = r[i]

) cout << e[i]

<<

' ';

//從0右側開始遍歷,便利到1時停止

return0;

}void

init()

//初始化函式

void

add_r

(int q,

int x)

//在下標為q的點右側插值

void

remove_

(int q)

//刪掉下標為q的點的值

//該**引用acwing**的**

注意事項:

①注意題中k的含義,因為是從idx = 2開始的,所以用k + 1。

②有的操作中不止乙個字元,所以op用字串。

③「基本思想」中說左側插值可以推到右側插值,所以只用寫右側插值函式。

④void add_r(int q, int x)中先改變(q的右邊的)的左邊,再改變q的右邊,順序不能變,否則q的右邊被先改變就不符合「基本思想」了。

⑤注意初始化。

⑥下標為0和1的點並不是鍊錶中的點,不存值。idx是從2開始。

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 雙鏈表 陣列實現添,刪

實現乙個雙鏈表,雙鏈表初始為空,支援5種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k個插入的數右側插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從左到右輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊...