LinkedList模板
常见问题
-
找链表中间节点
-
反转链表
-
快慢指针(找环入口,判断环存在,找中间节点)
-
非常好的题目
- 归并排序,判断链表是否是Palindrome
找链表中间节点
v1. 奇数返回正中间,偶数返回right
// v1: 找middle节点 (1,2,3,4)返回3, (1,2,3,4,5) 返回3
Node findMiddle(Node head) { // assert: head 至少有两个元素
Node slow = head, fast = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
v2. 奇数返回正中间,偶数返回left
用于链表的归并排序,res本身属于前一半res.next作为后半链表。
// v2: 找middle节点,(1,2,3,4) 返回2,(1,2,3,4,5)返回3.
// 适合的场景是,返回的middle节点,将middle.next 作为后半部分。 例如: 链表的归并排序算法
Node findMiddle(Node head) { // assert: head 至少有两个元素
Node slow = head, fast = head.next;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}