LeetCode--206.反轉連結串列
阿新 • • 發佈:2019-02-02
單鏈表反轉的實現
作為一道經典的面試題,連結串列反轉說起來容易,真正要寫出程式碼還是有一點難度(對於新手),在試錯了好幾次後,總算是磕磕絆絆的寫出來了,下面將程式碼的思路記錄下來。
連結串列程式碼如下:
// Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
迭代法:
遍歷舊連結串列的節點,並依次新增到新連結串列的頭部。
class Solution {
public ListNode reverseList(ListNode head) {
// 建立新的連結串列用來儲存舊連結串列節點
ListNode newNode = null;
while (head != null) {
// 建立一個臨時節點記錄當前節點的下一個節點
ListNode tempNode = head.next;
// 第一次:第一個節點指向null,第二次:第二個節點指向第一個節點,以此類推
head.next = newNode ;
// 將head賦值給newNode,此時newNode就是新連結串列的頭結點
newNode = head;
// 將臨時節點(下一個節點)賦值給head,繼續進行遍歷
head = tempNode;
}
return newNode;
}
}
遞迴法:
class Solution{
public ListNode reverseList(ListNode head){
// 遞迴終止條件
if(head == null || head.next == null){
return head;
}
// 遞迴
ListNode newNode = reverseList(head.next);
// 讓後一個節點指向當前節點
head.next.next = head;
// 當前節點指向null,避免形成環
head.next = null;
return newNode;
}
}