演算法題:反轉一個單連結串列&判斷連結串列是否有環

GetaChan發表於2019-11-27

僅分享個人比較喜歡的解法,有興趣可以自己繼續探究。題目來源於力扣

理論基礎

陣列&連結串列

反轉單連結串列

題目描述

反轉一個單連結串列

示例:

輸入: 1->2->3->4->5->NULL

輸出: 5->4->3->2->1->NULL

解題思路

雙指標迭代

Python 解法

def reverseList(self, head):
    cur = head
    prev = None

    while cur:
        # 記錄當前節點的下一個節點
        tmp = cur.next
        # 然後將當前節點指向prev
        cur.next = prev
        # pre和cur節點都前進一位
        prev = cur
        cur = tmp
    return pre

# 簡潔寫法
def reverseList(self, head):
    cur, prev = head, None
    while cur:
        cur.next, prev, cur = prev, cur, cur.next
    return prev

連結串列交換相鄰元素

題目描述

連結串列交換相鄰元素

解題思路

存在a、b(a.next)

把a, b 交換成 b,a

更新pre指標

Python 解法

def swapPairs(self, head):
    pre, pre.next = self, head
    while pre.next and pre.next.next
        a = pre.next
        b = a.next
        pre.next, b.next, a.next = b, a, b.next
        pre = a 
    return self.next

判斷連結串列中是否有環

題目描述

給定一個連結串列,判斷連結串列中是否有環

解題思路

  1. 判重,判斷每一個元素是否已經訪問過了

  2. 快慢指標,判斷兩個指標是否能相遇

Python 解法

#快慢指標
def hasCycle(self, head):
    fast = slow = head
    while slow and fast and fast.next:
        slow = slow.next
        fast = fast.next.next
        if slow is fast:
            return True
    return False

相關文章