反转链表
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def reverseList(self, head: ListNode) -> ListNode: cur = head if cur: node = head.next cur.next = None while node: next_node = node.next # 插入到头部 node.next = cur cur = node node = next_node return cur
链表技巧
- 1、合并两个有序链表 「虚拟头节点」技巧
- 2、合并k个有序链表 优先级队列(二叉堆)
- 3、寻找单链表的倒数第k个节点 双指针「虚拟头节点」技巧
- 4、寻找单链表的中点 「快慢指针」的技巧
- 5、判断单链表是否包含环并找出环起点
- 每当慢指针slow前进一步,快指针fast就前进两步。
- 如果fast最终遇到空指针,说明链表中没有环;
- 如果fast最终和slow相遇,那肯定是fast超过了slow一圈,说明链表中含有环
- 6、判断两个单链表是否相交并找出交点
- 如果用两个指针p1和p2分别在两条链表上前进,并不能同时走到公共节点,也就无法得到相交节点c1。
- 所以,解决这个问题的关键是,通过某些方式,让p1和p2能够同时到达相交节点c1。
- 所以,我们可以让p1遍历完链表A之后开始遍历链表B,让p2遍历完链表B之后开始遍历链表A,这样相当于「逻辑上」两条链表接在了一起。
- 如果这样进行拼接,就可以让p1和p2同时进入公共部分,也就是同时到达相交节点c1:

