Leetcode206. Reverse Linked List總結

這道題是逆轉單向鏈表
    最開始的時候一直想用迭代法做但是定義了三個變量就提示我Memory limit也不知道是怎麼回事。
    這道題用迭代法做的話關鍵在於定義一個prev變量記錄下一次循環需要指向的指針;而遞歸的關鍵在於創建一個節點指向最後一個節點。

迭代:

public ListNode reverseList(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode prev = null;
while (head != null) {
ListNode temp = head.next;
head.next = prev;
prev = head;
head = temp;
}
return prev;
}
遞歸:

public ListNode reverseList(ListNode head) {
ListNode fakeHead = new ListNode(-1);
reverse(head, fakeHead);
return fakeHead.next;
}
public ListNode reverse(ListNode node, ListNode fakeHead) {
if (node == null) {
return fakeHead;
} else {
ListNode tail = reverse(node.next, fakeHead);
tail.next = node;
node.next = null;
return node;
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章