算法修仙传 第二章 坊市奇遇:链表操作入门
第二章 坊市奇遇:链表操作入门
青云坊市西角,林玄被一阵灵力波动吸引。只见一白衣女子手持玉链表,指尖灵光流转间,节点如珠串般重组变幻。
"链表与数组不同,元素离散存储于天地间。"女子演示道:“这是单链表节点类:”
class ListNode:def __init__(self, val):self.val = val # 节点值self.next = None # 下一节点指针
【核心功法】
- 虚拟头节点(dummy node)技巧:
dummy = ListNode(0)
dummy.next = head
- 快慢指针寻中法:
slow = fast = head
while fast and fast.next:slow = slow.nextfast = fast.next.next
return slow
- 递归反转链表诀:
def reverse_list(head):if not head or not head.next:return headnew_head = reverse_list(head.next)head.next.next = headhead.next = Nonereturn new_head
实战演练
女子突然将链表抛向空中:“接住它,并找出环的入口!”
林玄需实现:
def detectCycle(head):slow = fast = headwhile fast and fast.next:slow = slow.nextfast = fast.next.nextif slow == fast:breakelse:return Nonewhile head != slow:head = head.nextslow = slow.nextreturn head