陣列模擬鍊錶 單鏈表

2021-10-14 13:23:11 字數 1589 閱讀 5607

單鏈表模板

//陣列模擬鍊錶

#include using namespace std;

const int n = 100010;

int head,idx,e[n],ne[n];

// head儲存煉表頭,e儲存節點的值,ne儲存節點的next指標,idx表示當前用到了哪個節點

//初始化

void init()

//在頭結點處插入一點

void add_to_head(int x)

//將x插入到下標是k的點後邊

void add(int k, int x)

//將下標是k的點後面的點刪除

void remove(int k)

典例

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

(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≤1000001≤m≤100000

所有操作保證合法。

輸入樣例:

10

h 9i 1 1

d 1d 0

h 6i 3 6

i 4 5

i 4 5

i 3 4

d 6

輸出樣例:

6 4 6 5
#include using namespace std;

const int n = 100010;

int n ;

int head,idx,e[n],ne[n];

void init()

void add_to_head(int x)

void remove(int k)

void add(int k,int x)

int main()

else if(op == 'd')

else if(op == 'i')

}for(int i = head; i != -1; i = ne[i])

cout << e[i] << ' ';

return 0;

}

鍊錶 單鏈表翻轉

看到好多部落格裡面寫鍊錶翻轉時候就是 要麼一樣,要麼沒有注釋。咱最近閒人一枚,準備好好寫寫code給大家分享一下自己的思想.使用前插法 1 2 3 4 null 我把1標記為prev,把2標記temp,把3標記next 使得最後順序輸出 4 3 2 1 null 定義linklist型別的prev ...

鍊錶 單鏈表 一

一.帶頭節點的單鏈表與不帶頭節點的單鏈表的比較 下面以插入演算法為例 1.帶頭節點 templatevoid linklist insert int i,t x if p null throw 位置非法 else 2.不帶頭節點templatevoid linklist insert int i,t...

鍊錶 單鏈表的建立

建立乙個節點 struct student 注意 當有新的節點要新增到鍊錶中時,原來最後乙個節點的指標將儲存新新增的節點位址,而新的節點的指標將指向空 null 當新增完成後,新節點將成為鍊錶的最後乙個節點。實際上是尾插法建立鍊錶 例 動態建立乙個鍊錶 步驟分析 1 初始化乙個頭節點,即定義乙個頭指...