核心技能
- null/nil 异常处理
- dummy node 哑巴节点
- 快慢指针
- 插入一个节点到排序链表
- 从一个链表中移除一个节点
- 翻转链表
- 合并两个链表
- 找到链表的中间节点
哑巴节点
适用于头节点可能被删除的场景。
下面示例代码是哑巴节点用于删除头节点。
ListNode dummy_node = new ListNode(-1);
// head节点为头节点。
dummy_node.next = head;
dummy_node.next = head.next;
// 返回新的头节点
return dummy_node.next;
快慢指针
常用于寻找中间节点。
还可以用于判断链表是否有环。
private ListNode findMiddle(ListNode head){
// 采用快慢指针
ListNode slow = head;
ListNode fast = head.next;
while (fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}