24. 两两交换链表中的节点
题目链接:力扣题目链接
思路:已知建议要用虚拟头节点,所以准备用两个指针,一个指向每次要变更的两个节点中的第一个节点,另一个指向每次更新完成的链表末尾。跳出条件就是变更节点为空,或者变更节点的下一个节点为空。代码如下:
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode newHead = new ListNode(0);
ListNode node = newHead;
ListNode fir = head;
while(1==1){
if(fir != null){
if(fir.next != null){
ListNode temp = fir.next.next;
ListNode sec = fir.next;
sec.next = fir;
fir.next = temp;
node.next = sec;
node = fir;
System.out.print(sec);
System.out.print(fir);
fir = temp;
}else{
node.next = fir;
break;
}
}else{
break;
}
}
return newHead.next;
}
}
1、解决的话必须画图,不然不好理解!
2、看到其他示例,其实美欧必要另个指针一个指针指向更新完成的末尾即可,无需指向需要更新的节点。
19.删除链表的倒数第N个节点
题目链接:力扣题目链接
思路:两个指针一个最终指向要删除的节点慢指针,一个最终指向末尾节点快指针,先移动快指针直到符合要删除的距离,快慢指针同时移动,快指针在末尾节点后,下一个为空执行删除。但是要慢指针删除的节点快节点多一个,因为慢指针指向删除节点的话不好进行删除,所以慢指针要在要删除指针的前一个。
面试题 02.07. 链表相交
题目链接:力扣题目链接
思路:看了下力扣的提示,就有2种情况,长度相同和长度不同,不同的话就调整到相同,长度相同的的话就直接比较,只要有某一个节链表相同既成立。可以对比末尾链表如果不同就可以直接pass。
142.环形链表II
题目链接:力扣题目链接
思路:确定是否是个环想到如果是环形,快慢指针最终相遇,所以判断是否是环形用的快慢指针。但是环形入口没想到。最终参考下图(来源:代码随想录)
虚拟头节点:简化需要考虑删除的是否是头节点这个操作。
用时:3.5h