LeetCode 24. 两两交换链表中的节点
📖 考察点
链表
📖 题意理解
原地修改
💡 解题思路
搞清指针当前指向的值
🔑 关键点总结
💻 代码实现
JavaScript
var swapPairs = function(head) {
let ret = new ListNode(0,head);
let pre = ret;
while(pre.next && pre.next.next){
let temp = pre.next.next;
pre.next.next = pre.next.next.next;
temp.next = pre.next;
pre.next = temp;
pre = pre.next.next;
}
return ret.next;
};
Rust
⏱️ 复杂度分析
📚 总结与反思
LeetCode 19.删除链表的倒数第N个节点
📖 考察点
链表 快慢指针
📖 题意理解
删除链表的倒数第N个节点
💡 解题思路
🔑 关键点总结
💻 代码实现
JavaScript
var removeNthFromEnd = function(head, n) {
if(!head.next){
return null;
}
let quick = head;
let slow = head;
while(n--){
quick = quick.next;
}
if(!quick){
return head.next;
}
while(quick.next!==null){
slow = slow.next;
quick = quick.next;
}
slow.next= slow.next.next;
return head;
};
⏱️ 复杂度分析
📚 总结与反思
⏱️ 复杂度分析
📚 总结与反思
LeetCode 面试题 02.07. 链表相交
📖 考察点
链表 操作
📖 题意理解
找出相交的节点
💡 解题思路
算出每个链表的长度, 统一到相同的位置 同时便历 相同的就是相交的节点
🔑 关键点总结
💻 代码实现
JavaScript
var getIntersectionNode = function(headA, headB) {
let ptrA = headA;
let ptrB = headB;
let lenA = 0;
let lenB = 0;
while(ptrA){
lenA++;
ptrA = ptrA.next;
}
while(ptrB){
lenB++;
ptrB = ptrB.next;
}
let cA;
let cB;
if(!(lenA > lenB)){
[cB,cA] = [headA,headB];
[lenA,lenB] = [lenB,lenA]
}else{
[cA,cB] = [headA,headB];
}
let offset = lenA-lenB;
console.log(offset);
while(offset--){
cA = cA.next;
}
while(lenB--){
if(cA === cB){
return cA;
}
cA = cA.next;
cB = cB.next;
}
return null;
};
⏱️ 复杂度分析
📚 总结与反思
LeetCode 142. 环形链表 II
📖 考察点
链表 数学计算
📖 题意理解
找出环形链表的入口
💡 解题思路
数学计算
🔑 关键点总结
💻 代码实现
JavaScript
var detectCycle = function(head) {
let fast = head;
let slow = head;
let temp;
while(fast && fast.next){
fast = fast.next.next;
slow = slow.next;
if(fast === slow){
temp = fast;
let slow2 = head;
while(slow2!==slow){
slow2=slow2.next;
slow = slow.next;
}
return slow;
}
}
return null;
};
⏱️ 复杂度分析
📚 总结与反思
有些问题需要用数学思维去解决