Problem: 160. 相交链表
思路
你选用何种方法解题?
解题过程
这些方法具体怎么运用? 如果有相同的节点,那么尾部一定是对其的 可以先找到链表长度的差值,然后同步向后移动 如果找到一样的节点则说明有相交,没有找到就没有相交
复杂度
- 时间复杂度: O(∗)O(*)O(∗)
- 空间复杂度: O(∗)O(*)O(∗)
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function getIntersectionNode(headA: ListNode | null, headB: ListNode | null): ListNode | null {
if(headA==null||headB==null){
return null;
}
// 首先计算链表长度,如果有相交我们希望可以尾部对齐
let len1 = 0,len2 = 0;
let tmp1:ListNode = headA;
while(tmp1) {
len1++;
tmp1 = tmp1.next;
}
tmp1 = headB;
while(tmp1){
len2++;
tmp1 = tmp1.next;
}
let s1:ListNode = headA;
let s2:ListNode = headB;
if(len1 >= len2){
let m = len1 - len2;
while(m){
s1 = s1.next;
m--;
}
}else{
let m = len2 - len1;
while(m){
s2 = s2.next;
m--;
}
}
while(s1!=null){
if(s1==s2){
return s1;
}
s1=s1.next;
s2=s2.next;
}
return null;
};