-
链表相交
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci- 自己做
let p1 = headA, p2 = headB; while (p1 !== p2) { if (p1.next) { p1 = p1.next } else { p1 = headB } if (p2.next) { p2 = p2.next } else { p2 = headA } } return p1 //超出时间限制
- 网上的
var getIntersectionNode = function (headA, headB) { let p1 = headA, p2 = headB; while (p1 !== p2) { p1 = p1 ? p1.next : headB p2 = p2 ? p2.next : headA } return p1 };
合并两个有序链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
var mergeTwoLists = function (l1, l2) {
//迭代
let current = new ListNode();
const dummy = current;
while (l1 || l2) {
if (!l1) {
current.next = l2;
return dummy.next;
} else if (!l2) {
current.next = l1;
return dummy.next;
}
if (l1.val <= l2.val) {
current.next = l1
l1 = l1.next
} else {
current.next = l2
l2 = l2.next
}
current = current.next;
}
return dummy.next;
//递归
if (l1 === null) return l2;
if (l2 === null) return l1;
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};