160.相交链表
1.哈希表
2.双指针分别遍历两个链表,相等时返回交点。
两个链表相交节点前的结点个数不一定相同,所以当指针同时从A,B的头开始时,并不能同时遍历到交点,会出现错误答案。
【4,1,8,4,5,5,6,1,8,4,5】
【5,6,1,8,4,5,4,1,8,4,5】
相当于两个指针都遍历了m+n的长度,后端对齐了。
82. 删除排序链表中的重复元素 II
哈希表 ,乐:)自己写出来啦!
24. 两两交换链表中的节点
用了三个指针+一个假的头结点,乐:)自己写出来啦!
但是为什么new ListNode(0,head);new出来的对象是一个指针啊。
707.设计链表
要自己定义结构体和新的类ListNode;
25.K个一组翻转链表
参考206.反转链表
需要把链表节点按照 k 个一组分组,所以可以使用一个指针 head 依次指向每组的头节点。这个指针每次向前移动 k 步,直至链表结尾。
对于每个分组,先判断它的长度是否大于等于 k。若是,就翻转这部分链表,否则不翻转。
翻转一个分组内的子链表,还需要将子链表的头部与上一个子链表连接,以及子链表的尾部与下一个子链表连接。
143.重排链表
1.因为链表不支持下标访问,所以我们无法随机访问链表中任意位置的元素。利用线性表存储该链表,然后利用线性表可以下标访问的特点,直接按顺序访问指定元素,重建该链表即可。
2.任务即可划分为三步:
- 找到原链表的中点(参考「876. 链表的中间结点」)。可以使用快慢指针来 O(N)O(N) 地找到链表的中间节点。(快慢指针。)
- 将原链表的右半端反转(参考「206. 反转链表」)。可以使用迭代法实现链表的反转。
- 将原链表的两端合并。