題目給一個排序好的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;
}
};