如何連結串列反轉

時間 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語言 單向連結串列如何排序?

問明 void link order stu p head stu pb,pf,temp pf p head if p head null 連結串列為空printf needn t order.n return if p head next null 連結串列有1個節點 printf only on...

如何建立單連結串列

include include struct lnode 定義單連結串列結點 struct lnode creat creat 建立單連結串列 函式的呼叫宣告 void print struct lnode head,char a print 列印單連結串列 函式的呼叫宣告 void main 主函...

電機正反轉怎麼看,如何區分電機正反轉

更上百層樓 從兩者的操作原理進行辨別 一 正向啟動 1 合上空氣開關qf接通三相電源。2 按下正向啟動按鈕sb3,km1通電吸合併自鎖,主觸頭閉合接通電動機,電動機這時的相序是l1 l2 l3,即正向執行。二 反向啟動 1 合上空氣開關qf接通三相電源。2 按下反向啟動按鈕sb2,km2通電吸合併通...