AcWing 826 單鏈表

2021-09-25 02:10:43 字數 2143 閱讀 1867

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

(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

所有操作保證合法。

10h 9

i 1 1

d 1d 0

h 6i 3 6

i 4 5

i 4 5

i 3 4

d 66 4 6 5

此**是在楊dalao**的基礎上修改的

#include

using namespace std;

const

int n =

1e6+10;

// head表示第乙個結點的下標

//e[i]表示陣列下標為i的元素的值,注意這裡的i並不代表鍊錶的第i個結點,只表示陣列的下標

//ne[i]表示陣列下標為i的元素的指標

//idx表示已經插入了多少個元素,是新插入元素的下標

int head, e[n]

, ne[n]

, idx;

//初始化

void

init()

//讓x成為鍊錶的第乙個結點,即向煉表頭插入乙個數

void

add_to_head

(int x)

//刪除陣列中下標為k的結點,即刪除插入的第k個數後面的數

void

move

(int k)

//在下標k-1之後新增結點,即在第k個插入的數後插入乙個數

void

add(

int k,

int x)

intmain

(void

)else

if(c==

'i')

else

if(c==

'd')

}for

(int i=head;i>=

0;i=ne[i]

) cout<<<

" ";

cout<<

"\n"

;return0;

}

模板

#include

using

namespace std;

const

int n =

1e5+5;

int idx, head, n[n]

, ne[n]

;int a;

//初始化

void

init()

//在煉表頭插入乙個數a

void

add_head

(int x)

//向鍊錶中k位置插入x

void

add(

int k,

int x)

//將k刪除,需要保證頭結點存在

void

remove

(int k)

intmain

(void

)else

if(op ==

"h")

else

if(op ==

"i")

}for

(int i = head; i !=-1

; i = ne[i]

) cout << n[i]

<<

" ";

cout << endl;

return0;

}

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 個數,...