如何連結串列反轉

時間 2021-09-05 11:59:54

1樓:黑暗中的希望

單向連結串列的反轉是一個經常被問到的一個面試題,也是一個非常基礎的問題。比如一個連結串列是這樣的: 1->2->3->4->5 通過反轉後成為5->4->3->2->1。

最容易想到的方法遍歷一遍連結串列,利用一個輔助指標,儲存遍歷過程中當前指標指向的下一個元素,然後將當前節點元素的指標反轉後,利用已經儲存的指標往後面繼續遍歷。源**如下:

struct linka ;

void reverse(linka*& head)head->next = null;

head = pre;

}還有一種利用遞迴的方法。這種方法的基本思想是在反轉當前節點之前先呼叫遞迴函式反轉後續節點。源**如下。

不過這個方法有一個缺點,就是在反轉後的最後一個結點會形成一個環,所以必須將函式的返回的節點的next域置為null。因為要改變head指標,所以我用了引用。演算法的源**如下:

linka* reverse(linka* p,linka*& head)

else}

2樓:溪貝0號

扣著的是頭節點(頭子)

車是首節點(首子)

馬是次節點(次子)

牙籤細的是指標指向,香頭髮黑的是指向,鐵頭細的是指向。

以下是while迴圈(條件:香頭指向不為空)第一個迴圈把馬弄到車前面,

第二個迴圈把相弄到馬前面

第三個迴圈把士弄到相前面

直到香指向為空後停止迴圈。

**如下:只需要一個首結點phead,就能把連結串列找到,並倒置。具體**如下

p香=phead->pnext;

p鐵=p香->pnext;

p香->pnext=null;

p香=p鐵

while(p香 !=null)

p鐵=p香->pnext;

p香->pnext=phead->pnext;

phead->pnext=p香;

p香=p鐵;

對照偽演算法(三步四迴圈),和上面的**是一一對應的:

第一步:香頭指向首子,鐵頭指向次子

第二步:刪掉首子指向次子(鐵頭所指向的那個子)的牙籤第三步:香頭跟著鐵頭

以下迴圈條件:(條件:香頭指向不為空)

迴圈4:香頭跟著鐵頭

自己用道具操作幾遍,然後把流程背會,以後自己根據流程寫**即可。

如何c語言建立單鏈表,如何C語言建立單鏈表

小甜甜愛亮亮 c語言建立單鏈表如下 include stdio.h include stdlib.h include malloc.h include iostream.h typedef struct node int data node next node list void create in...

c語言連結串列排序,C語言連結串列排序

問明 include stdafx h include stdlib h 建立一個節點,data為value,指向null node create intvalue node head node malloc sizeof node head data value head next null re...

已知head指向帶頭結點的單向連結串列,連結串列中每個結點包含字元型資料域(data)和指標域(next)。請編寫函

千里 已知head指向一個帶頭結點的單向連結串列連結串列中每個結點包含字元型資料域data和指標域next。請編寫函式實現連結串列的逆置。 光之琉璃影之殤 include include typedef struct node node,pnode pnode create void void ou...