经验总结
假链表头的模拟
// 假链表头模拟的前提是已经处理了真链表头head为null的情况
// 节点有效性校验
if (head == null) return null;
// 假链表头的模拟
ListNode fakeHead = new ListNode(0);
// 假链表头的next指针指向真链表头
fakeHead.next = head;
// pre指针指向假链表头
ListNode pre = fakeHead;
// cur指针指向真链表头
ListNode cur = head;
// 返回假链表头的next指针指向的元素
return fakeHead.next;
相关题目
修改”引用的指向”和”对象的next指针的指向”的区别
修改”引用的指向”-修改引用的指向,修改之后引用指向了不同的对象
修改”对象的next指针的指向”-修改对象的next指针的指向,修改之后对象的next指针指向不同的对象,一般通过修改对象的next指针的指向来链接新链表
删除链表中的节点
链表中倒数第K个节点
- 剑指offer: 面试题22. 链表中倒数第K个节点
- LintCode: 166. 链表倒数第n个节点
- LintCode: 174. 删除链表中倒数第n个节点
- 求链表的中间节点.如果链表中的节点总数为奇数,则返回中间节点;如果节点总数是偶数,则返回中间两个节点的任意一个.为了解决这个问题,我们也可以定义两个指针,同时从链表的头结点出发,一个指针一次走一步,另一个指针一次走两步.当走得快的指针走到链表的末尾时,走得慢的指针正好在链表的中间