單鏈表的逆置

2021-08-08 17:20:51 字數 1456 閱讀 2947

資料結構中的鍊錶是面試和考試的重點,鍊錶的逆置也是重點中的重點,所以我們今天就來具體看一下單鏈表的逆置。

首先單鏈表的定義是乙個結構體,因為乙個節點要儲存兩個值所以定義為結構體更為合適。乙個是資料域用來儲存其資料,乙個是next域,它是乙個結構體指標,儲存下乙個結點的位址,用於指向下乙個結點。

首先我們先建立乙個帶頭結點的單鏈表:

我這裡說單鏈表的逆置兩種方法:

1、頭插法

定義了兩個指標(q=p->next)從第乙個資料結點開始一直用頭插的方法將單鏈表逆置

初始狀態         頭    1   2  4   3    

第一次頭插       頭    1   2   4   3

第一次頭插       頭    2   1   4   3

第一次頭插       頭    4   2   1   3

第一次頭插       頭    3  4    2    1

不過在這裡面需要注意的是,開始時用乙個結點儲存第乙個資料節點的位址,然後將頭結點的next域置空,因為前面儲存了第乙個資料節點的位址所以後面的資料並不會丟失。逆置後第乙個結點就變成了最後乙個節點,所以它的next域應該為null,然後更新頭結點的next域,然後頭插進來的結點的next域賦值成頭結點的next域,以此類推...

過程如圖:

當p為null時,結束逆置。

附**:

void revers(list plist)

node *p = plist->next;

node *q;

plist->next = null;//

while(p != null)

時間有點不夠第二種方法下篇再說~

單鏈表逆置

單鏈表逆置 include include define item num 10 typedef struct tagnode node node linklist create void linklist destroy node head void linklist print node hea...

單鏈表逆置

name 單鏈表逆置 author 巧若拙 date 22 11 14 16 13 description 分別用遞迴和非遞迴兩種方式實現單鏈表 不含頭結點 的逆置 include include include typedef char elemtype typedef int status 函式...

單鏈表逆置

最近在leetcode oj上刷題,將一些演算法題的解法記錄下來,也期待一些新的更好的方法。題目是這樣滴 206.reverse linked list reverse a singly linked list.hint a linked list can be reversed either it...