数组模拟单链表acwing826. 单链表
文章目錄
- 單鏈表一道題
- 數組模擬單鏈表模板
- 初始化鏈表
- 向表頭插入數
- 在下標為k的節點的下一個位置插入節點
- 刪除下標為k的節點的下一個節點
單鏈表一道題
單鏈表題目
實現一個單鏈表,鏈表初始為空,支持三種操作:
(1) 向鏈表頭插入一個數;
(2) 刪除第k個插入的數后面的數;這里翻譯成人話:刪除下標為k-1的節點的后面的數,因為下標從0開始
(3) 在第k個插入的數后插入一個數:在下標為k-1的節點后面插入一個數
現在要對該鏈表進行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
所有操作保證合法。
輸入樣例:
10 H 9 I 1 1 D 1 D 0 H 6 I 3 6 I 4 5 I 4 5 I 3 4 D 6輸出樣例:
6 4 6 5難度:簡單
時/空限制:1s / 64MB
總通過數:4526
總嘗試數:6720
來源:模板題,AcWing
注意:head是頭結點,同時也是第一個節點,也就是說向表頭插入一個數就是插入到head。
比如想要在空鏈表表頭位置插入4個數:9,6,7,8
head: 0
head: 1
head: 2
head: 3
最后輸出鏈表:8 7 6 9
ac代碼
#include<iostream> using namespace std; const int maxn=1e5+10; int e[maxn],ne[maxn],head,idx;void init(){head=-1;idx=0; }//表頭插入節點 void add_to_head(int x){e[idx]=x;ne[idx]=head;head=idx;idx++; }//刪除下標為k的節點的后一個節點 void remove(int k){ne[k]=ne[ne[k]]; }//在節點下標為k的節點后面插入一個值為x 的節點 void insert(int k,int x){e[idx]=x;ne[idx]=ne[k];ne[k]=idx;idx++; }int main(){init();//此步勿忘int m;cin>>m;while(m--){char op;int k,x;cin>>op;if(op=='H'){cin>>x;add_to_head(x);}else if(op=='D'){cin>>k;if(!k) head=ne[head];//刪除頭結點remove(k-1);}else if(op=='I'){cin>>k>>x;insert(k-1,x);}}for(int i=head;i!=-1;i=ne[i]) cout<<e[i]<<" ";cout<<endl;return 0;}板子
需要注意的是:數組下標從0開始,也就是說,第k個插入的元素其下標為k-1.
另外:main函數里面勿忘init()函數。
數組模擬單鏈表模板
定義
e[i]表示下標為i的節點的數值
ne[i]表示下標為i的節點的next的指針
head表示頭結點指向的位置
idx表示當前可用的節點的下標
初始化鏈表
head表示頭結點指向的位置,-1表示指向空集,即空的鏈表
idx表示當前可用的節點的下標,初始時為0,表示節點編號從0開始。
向表頭插入數
換句話說,新插入元素的后繼就是頭結點指向的位置ne[idx]=head。然后頭結點指向新的節點head=idx。當前可用的節點下標更新。
void add_to_head(int x){e[idx]=x;ne[idx]=head;head=idx;idx++; }在下標為k的節點的下一個位置插入節點
//idx表示當前可用的節點位置 void insert(int k,int x){//x表示插入的數e[idx]=x;//數據域ne[idx]=ne[k];ne[k]=idx;idx++; }刪除下標為k的節點的下一個節點
下標為k的節點的指針指向,下標為k的節點的后繼的后繼。
void remove(int k){ne[k]=ne[ne[k]]; }總結
以上是生活随笔為你收集整理的数组模拟单链表acwing826. 单链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 租房遇到无良中介应该怎么办?
- 下一篇: 数组模拟双链表