1 . 两个链表的第一个公共节点
[](剑指 Offer 52. 两个链表的第一个公共节点 - 力扣(LeetCode))
分析 : 假设 A 链表不与 B 链表相交的部分长为 a , B 链表不与 A 链表相交的部分长为 b ,相交部分为 c 。 使用双指针 p1 、p2 分别指向两个链表头进行遍历 ,
- 两链表长度一样且相交 ,则当两指针所指结点相等时 ,则是两链表的交点处。
- 两链表长度不一样但相交 ,则当 p1指针 遍历到 A 链表尾部时 ,再将其指向 B 链表头部 , p2同理。两者所指结点相等时 ,刚好是两链表相交处 ,且此时两者恰好都走了 a + b + c 步 。
- 两链表长度一样但不相交 ,两者同时相等且都为 null 。
- 两链表长度不一样且不相交 ,两者各走 a + b 后同时相等且都为 null 。
var getIntersectionNode = function(headA, headB) {
if(!headA||!headB) return null;
var pA = headA;
var pB = headB;
while(pA!==pB)
{
pA = pA? pA.next : headB;
pB = pB? pB.next : headA;
}
return pA;
};
2 . 反转单词顺序
[](剑指 Offer 58 - I. 翻转单词顺序 - 力扣(LeetCode))
该题就可以借助 JS 里封装的各种 API
var reverseWords = function(s) {
var arr1 = s.split(" ");
var arr2 = arr1.filter((item)=>{
return item!==""&&item!==" ";
})
var arr3 = arr2.reverse();
var t = arr3.join(" ");
return t;
};
注意 : 该题要注意 "" 和 " " , 开始将字符串转为数组时 ,要注意去除数组里的 "" 和 " " 元素 ,因为最后将数组转为字符串时 ,用的 string . join(" ")方法会自动将单词之间加上空格 " " 。