链表
单链表
单链表中的每个结点不仅包含值,还包含链接到下一个结点的引用字段。通过这种方式,单链表将所有结点按顺序组织起来。
例题:
LeetCode 707. 设计链表(Java)
链表中的双指针
一个用于解决链表中的双指针问题模板:
// Initialize slow & fast pointers
//初始化快慢指针
ListNode slow = head;
ListNode fast = head;
/**
* Change this condition to fit specific problem.
* Attention: remember to avoid null-pointer error
**/
while (slow != null && fast != null && fast.next != null) {
slow = slow.next; // move slow pointer one step each time慢指针移一步
fast = fast.next.next; // move fast pointer two steps each time快指针移两步
if (slow == fast) { // change this condition to fit specific problem改变条件去适应特殊问题
return true;
}
}
return false; // change return value to fit specific problem
例题:
LeetCode 141. 环形链表 (Java)
LeetCode 142. 环形链表 II(Java)
LeetCode160. 相交链表(Java)
LeetCode 19. 删除链表的倒数第N个节点(Java)
经典问题
反转一个单链表
一种解决方案是按原始顺序迭代结点,并将它们逐个移动到列表的头部
例题:
LeetCode 206. 反转链表(Java)
LeetCode 203. 移除链表元素(Java)
LeetCode 328. 奇偶链表(Java)
LeetCode 234. 回文链表(Java)
小结:
LeetCode 21. 合并两个有序链表 (Java)
LeetCode 2. 两数相加 (Java)
LeetCode 430. 扁平化多级双向链表(Java)
LeetCode 138. 复制带随机指针的链表(Java)
LeetCode 61. 旋转链表(Java)