反轉鍊錶的不同解法

2021-10-10 12:52:28 字數 938 閱讀 2129

反轉乙個單鏈表。

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

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

如題,一上來先用最好理解的方法:依此將後一節點鏈結到最前面。

具體邏輯是:將原本的頭節點指向將要被放到頭節點的節點的下乙個節點,然後將p節點放到初始節點了前面,然後更新初始節點,再更新p節點

class

solution

listnode p =

newlistnode(0

);//指向初始頭節點的下乙個節點(即將要被放到第乙個的節點)

listnode ans =

newlistnode(0

);//指向新的頭節點

if(head.next!=null)

//判斷是不是只有乙個節點,如果不是,給p賦值

else

ans=head;

while

(p!=null)

return ans;

}}

二、遞迴方法

使用遞迴函式,一直遞迴到鍊錶的最後乙個結點,該結點就是反轉後的頭結點,記作 retret .

此後,每次函式在返回的過程中,讓當前結點的下乙個結點的 nextnext 指標指向當前節點。

同時讓當前結點的 nextnext 指標指向 nullnull ,從而實現從鍊錶尾部開始的區域性反轉

當遞迴函式全部出棧後,鍊錶反轉完成。

class

solution

listnode ans =

reverselist

(head.next)

;

head.next.next=head;

head.next=null;

return ans;

}}

leetcode 反轉鍊錶(幾種不同的解法)

用三個指標分別指向前三個節點,然後依次往後挪 definition for singly linked list.struct listnode class solution 如果鍊錶無元素或只有乙個頭結點,則直接返回頭結點即可 listnode p1 head listnode p2 head n...

鍊錶 反轉鍊錶

問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...

反轉鍊錶與分組反轉鍊錶

經典的反轉鍊錶,先上 public class listnode public class printlist system.out.println public class reverse public listnode reverse listnode root listnode pre nul...