面試題目 單鏈表的反轉(兩種方法)

2021-10-08 20:33:33 字數 2365 閱讀 8130

2.3 **

2.4 總結

3 方式二:新建鍊錶,頭節點插入法

3.3 **

3.4 總結

單鏈表node的資料結構定義如下:

class

listnode

}

2.1 思路

把當前鍊錶的下乙個節點pcur插入到頭結點dummy的下乙個節點中,就地反轉。

dummy->1->2->3->4->5的就地反轉過程:

dummy->2->1->3->4->5

dummy->3->2->1->4->5

dummy->4>-3->2->1->5

dummy->5->4->3->2->1

2.2 解釋

1初始狀態

2 過程

pcur是需要反轉的節點。

1 prev連線下一次需要反轉的節點

2 反轉節點pcur

3 糾正頭結點dummy的指向

4 pcur指向下一次要反轉的節點

//釋放節點,注意!!!

dummy =

null

;return pcur;}}

;2.4 總結

1個頭結點,2個指標,4行**

注意初始狀態和結束狀態,體會中間的**過程。

3.1 思路

新建乙個頭結點,遍歷原鍊錶,把每個節點用頭結點插入到新建鍊錶中。最後,新建的鍊錶就是反轉後的鍊錶。

3.2 解釋

1 初始狀態

2 過程

pcur是要插入到新鍊錶的節點。

pnex是臨時儲存的pcur的next。

1 pnex儲存下一次要插入的節點

2 把pcur插入到dummy中

3 糾正頭結點dummy的指向

4 pcur指向下一次要插入的節點

注意:上圖有一點問題,網上摘取的

3.3 **

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

pcur = dummy -

> next;

delete dummy;

dummy =

null

;return pcur;}}

;

3.4 總結

1個頭結點,2個指標(包含乙個臨時儲存節點的pnex),4行**

注意初始狀態和結束狀態,體會中間的**過程。

單鏈表反轉 逆序的兩種方法

摘自 延伸閱讀 此文章所在專題列表如下 第01話 線性表的概念與定義 第02話 線性表的抽象資料型別adt定義 第03話 線性表的順序儲存結構 第04話 線性表的初始化 第05話 線性表的遍歷 插入操作 第06話 判斷線性表是否為空與置空操作 第07話 線性表的查詢操作 第08話 線性表刪除某個元素...

面試題 單鏈表反轉

問題 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。一 非遞迴演算法 假設有鍊錶a b c d e f g。在反轉鍊錶過程中的某一階段,其鍊錶指標指向為 a b c d e f g。也就是說在結點d之前的所有結點都已經反轉,而結點d後面的結點e開始的所有結點都沒有反轉。這樣...

鏈表面試題 反轉單鏈表

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null解決方案 頭插法開闢新鍊錶並逐個讀取舊鍊錶,頭插進新鍊錶,這樣新的鍊錶與原鍊錶的結構就是反的,需要借助輔助空間 definition for singly linked list.struct listnod...