一、链表
- 反转链表:
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur: # 注意循环条件
cur.next, cur, pre = pre, cur.next, cur
return pre # 注意这里的return值
- 两两交换链表元素:
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
result = ListNode() # 为了帮助最后返回头指针
pre, pre.next = result, head
while pre.next and pre.next.next:
a = pre.next
b = a.next
a.next, b.next, pre.next = b.next, a, b
pre = a
return result.next
- 判断链表里面是否有环 链接
set
class Solution:
def hasCycle(self, head: ListNode) -> bool:
seen = set()
while head:
if head in seen:
return True
seen.add(head)
head = head.next
return False
快慢指针
class Solution(object):
def hasCycle(self, head):
fast = head
low = head
while low and fast and fast.next: # 注意这里的循环条件
fast = fast.next.next
low = low.next
if fast == low:
return True
return False