這道題是逆轉單向鏈表
最開始的時候一直想用迭代法做但是定義了三個變量就提示我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;
}
}