僅分享個人比較喜歡的解法,有興趣可以自己繼續探究。題目來源於力扣
理論基礎
陣列&連結串列
反轉單連結串列
題目描述
反轉一個單連結串列
示例:
輸入: 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
判斷連結串列中是否有環
題目描述
給定一個連結串列,判斷連結串列中是否有環
解題思路
判重,判斷每一個元素是否已經訪問過了
快慢指標,判斷兩個指標是否能相遇
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