Leetcode 206. Reverse Linked List

Reverse Linked List

Reverse Linked List :

題目給一個排序好的linkes list,要倒序(reverse)這個linked list。linked list是資料結構中一種用指標的方法串接節點而成的list

Python

方法一 :

將「指向下一個 head.next」改成指向「前一個節點 prev」

有三個指針:

  • head:指向自己
  • head.next:指向下一個
  • prev:指向前一個

需要將三個指針交換成:

  • head → 指向下一個(head.next)
  • head.next → 指向前一個(prev)
  • prev → 指向自己(head)
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        prev=None
        while head:
            next=head.next    #head → head.next
            head.next=prev    #head.next → prev
            prev=head         #prev → head
            head=next
        return prev

方法二 : 遞迴(recursion)

記下下一個,並將自己反過來指向前一個,用遞迴來反覆實作

class Solution:
    def reverseList(self, head: Optional[ListNode],prev=None) -> Optional[ListNode]:
        if not head:return prev
        next=head.next          #記下下一個
        head.next=prev          #自己反過來指向前一個
        return self.reverseList(next,head)     #遞迴

C++

定義兩個指針 prev 和 curr,初始化為 nullptr 和 head。 循環遍歷鍊錶,每次將 curr 的 next 指向 prev,然後將 prev 和 curr 向後移動一位,直到遍歷完整個鍊錶。 最後返回 prev,即為反轉後的鍊錶頭。

class Solution {
	public:
		ListNode reverseList(ListNode* head) {
			ListNode* prev = nullptr;
			ListNode* curr = head;
		while (curr != nullptr) {
		ListNode* next = curr->next;
			curr->next = prev;
			prev = curr;
			curr = next;
			}
		return prev;
		}
};