编写一个程序,找到两个单链表相交的起始节点。
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
思路
两个指针同时从两个链表的head开始移动,由此计算出两个链表的长度差。然后让较长的链表减去这个差值,再设置两个指针,边比较边移动
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *temp;
ListNode *temp1 = headA;
ListNode *temp2 = headB;
int k=0;
int j = 0;
while(temp1){
k++;
temp1 = temp1->next;
}
while(temp2){
j++;
temp2 =temp2->next;
}
if(k>=j){
while(k !=j){
headA = headA->next;
k--;
}
}else{
while(k !=j){
j--;
headB = headB->next;
}
}
while(headA != headB){
headA = headA->next;
headB = headB->next;
}
if(headA)
return headA;
else
return NULL;
}
};
复杂度分析
时间复杂度:O(m+n),m为较长链表的长度,n为较短链表的长度
空间复杂度:O(1)