種類 : linked list
難度 : easy
題目 : 206. Reverse Linked List
思維邏輯
prev: 紀錄舊node.next
tmp: 紀錄當前node
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next
class Solution: """ 雖然ListNode為singly-linked list,但反轉時使用doubly linked list概念 """ def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: cur = head tmp = None while cur: prev = cur.next cur.next = tmp tmp = cur cur = prev return tmp
|
時間複雜度: O(n)
空間複雜度: O(1)
難點
- 紀錄node與切換node時間點
- 迴圈結束規則(當前node是否為None)
最佳解法
1 2 3 4 5 6 7 8 9 10
| class Solution: def reverseList(self, head: ListNode) -> ListNode: return self.reverse(head, None) def reverse(self, cur: ListNode, pre: ListNode) -> ListNode: if cur == None: return pre temp = cur.next cur.next = pre return self.reverse(temp, cur)
|
時間複雜度: O(n)
空間複雜度: O(n),調用n層