單鏈表和雙鏈表

原文鏈接:https://www.acwing.com/blog/content/404/

單鏈表 —— 模板題 AcWing 826. 單鏈表

單鏈表----鄰接表(用來在存儲圖和樹)

// head存儲鏈表頭
//e[]存儲節點的值
//ne[]存儲節點的next指針
//idx表示當前用到了哪個節點
int head, e[N], ne[N], idx;

// 初始化
void init()
{
    head = -1;
    idx = 0;
}

// 在鏈表頭插入一個數x
void insert(int x)
{
    e[idx] = x;
    ne[idx] = head;
    head = idx;
    idx++;
}

//把x插入到下標是k的點後面
void add(int k,int x){
   e[idx]=x;
   ne[idx]=ne[k];
   ne[k]=idx;
   idx++;   
}

//將下標是k的點的後面一個點刪除
void del(int k){
   ne[k]=ne[ne[k]];
}

// 將頭結點刪除,需要保證頭結點存在
void del_herad()
{
    head = ne[head];
}

雙鏈表 —— 模板題 AcWing 827. 雙鏈表

// e[]表示節點的值,l[]表示節點的左指針,r[]表示節點的右指針,idx表示當前用到了哪個節點
int e[N], l[N], r[N], idx;

// 初始化
void init()
{
    //0是左端點,1是右端點
    r[0] = 1, l[1] = 0;
    idx = 2;
}

// 在節點a的右邊插入一個數x
void insert(int a, int x)
{
    e[idx] = x;
    l[idx] = a, r[idx] = r[a];
    l[r[a]] = idx, r[a] = idx ++ ;
}

// 刪除節點a
void remove(int a)
{
    l[r[a]] = l[a];
    r[l[a]] = r[a];
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章