跳到主要内容

160.相交链表

链接:160.相交链表
难度:Easy
标签:哈希表、链表、双指针
简介:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

题解 1 - typescript

  • 编辑时间:2021-06-04
  • 执行用时:128ms
  • 内存消耗:46.9MB
  • 编程语言:typescript
  • 解法介绍:利用 set 储存。
function getIntersectionNode(headA: ListNode | null, headB: ListNode | null): ListNode | null {
if (headA === null || headB === null) return null;
const setA = new Set<ListNode>();
const setB = new Set<ListNode>();
let pA: ListNode | null = headA;
let pB: ListNode | null = headB;
while (pA !== null && pB !== null) {
setA.add(pA);
setB.add(pB);
if (setB.has(pA)) return pA;
if (setA.has(pB)) return pB;
pA = pA.next;
pB = pB.next;
}
while (pA !== null) {
if (setB.has(pA)) return pA;
pA = pA.next;
}
while (pB !== null) {
if (setA.has(pB)) return pB;
pB = pB.next;
}
return null;
}

题解 2 - c

  • 编辑时间:2021-11-19
  • 执行用时:36ms
  • 内存消耗:13.5MB
  • 编程语言:c
  • 解法介绍:双指针。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *a = headA, *b = headB;
while(a != b){
a = a ? a->next : headB;
b = b ? b->next : headA;
}
return a;
}

题解 3 - c

  • 编辑时间:2021-11-19
  • 执行用时:36ms
  • 内存消耗:13.5MB
  • 编程语言:c
  • 解法介绍:双指针。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *a = headA, *b = headB;
while(a != b){
a = a ? a->next : headB;
b = b ? b->next : headA;
}
return a;
}