【資料結構】連結串列的逆置(圖文)
阿新 • • 發佈:2021-10-10
前言
輸入的是一條帶有頭結點的連結串列L 故頭結點為L,第一個節點為L->next.
先上程式碼
void Reverse(LinkList *L)
{
LinkList *p,*q;
p = L->next;
L->next = NULL;
while(p!=NULL)
{
q = p;
p = p->next;
q->next = L->next;
L->next = q;
}
}
講解(摘自:連結串列逆置詳細講解(圖文))
我們先看第一輪
建議閱讀順序:黑色(初始)、藍色(操作)、紅色(理解)
第二輪:
建議閱讀順序:黑色(初始)、藍色(操作)、紅色(理解)
第三輪:
就是頭插法
就是頭插發
就是頭插發
最後給一份帶註釋的程式碼~
void listReverse(linkedList &L) { node *p,*s; //1.準備工作 p = L->next; L->next = NULL; while(p) { //2.1 s記錄正在處理的結點,p記錄下一輪待處理的結點 s = p; //s承接上一輪記錄的位置 p = p->next; //p為下一輪記錄位置 //2.2 把s插入 已逆置的部分 中 s->next = L->next; // L->next代表已逆置的第一結點,s的指標域指向它 L->next = s; //(頭結點的指標域,即)第一結點 設定為s //2.2步驟相當於: //s 對 隊伍(已逆置部分)的隊首(已逆置的第一結點)說:你不要排在櫃檯前了,你排在我後面 //等隊伍排在s後面後,s自己排到了櫃檯前 } }