反轉乙個單鏈表。
示例:輸入: 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...