反轉乙個鍊錶

2021-09-24 15:46:05 字數 1120 閱讀 2333

反轉乙個單鏈表

題目源於領扣:

示例:輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

高階:你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題

題目分析

因為乙個單個鍊錶結點有前驅和後繼,所以我們不能像順序表那樣直接交換元素。

我們需要三個指標prev,cur,_next來完整的處理節點間的關係。

過程如圖:

如**:

注意

1.prev的功能是將頭結點的next變為空,並且標記被操作結點的新nextcur始終是被操作結點,_next始終標記結點原來的next,保持鍊錶不斷裂。

2. 這裡的指標位置變換,很容易被繞進去,比如:prev=cur,可以讀成prev變成cur,這樣理解會比較好順思路一些,寫的時候也會好想一點。

3. 迴圈走到最後的時候,prev指向新的頭結點,再返回的的時候,記得返回的是prev,或者也可以多寫一句,將prev賦給head,再返回head

/**

* definition for singly-linked list.

* struct listnode

* };

*///迭代法

class solution

listnode* prev=null;

listnode* cur=head;

listnode* _next=null;

while(cur)

return prev;}};

如何反轉乙個鍊錶

最近在刷leetcode中關於鍊錶的題,發現很多題都涉及到了了鍊錶的反轉 給出乙個鍊錶 1,2,3,4,5 反轉為 5,4,3,2,1 解決該問題可以用迴圈解決,而核心思想便是在迴圈中每次只讓第i個元素插入到鍊錶的頭部 在迴圈之前鍊錶長這樣 1 2 3 4 5第一次迴圈 2 1 3 4 5第二次迴圈...

206 反轉鍊錶 反轉乙個單鏈表。

題解一 迭代法 在遍歷鍊錶時,將當前節點的 next 指標改為指向前乙個節點。由於節點沒有引用其前乙個節點,因此必須事先儲存其前乙個節點pre。在更改引用之前,還需要儲存後乙個節點。最後返回新的頭引用。definition for singly linked list.struct listnode...

將乙個鍊錶進行反轉

面試題16 反轉鍊錶 定義乙個函式,輸入鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。struct listnode 建立鍊錶 listnode createlistnode int value 連線鍊錶的兩個結點 void connectlistnode listnode pcurrent,l...