题目:
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
If the two linked lists have no intersection at all, return null.
The linked lists must retain their original structure after the function returns.
You may assume there are no cycles anywhere in the entire linked structure.
Your code should preferably run in O(n) time and use only O(1) memory.
思路:
题意:找两条链表的第一个交点。
要考虑,两链表长度不一致的问题。让长的链表先走,当两链表长度一致时,一起走,发现有节点相等,即为第一个交点。
代码:
class Solution {
public:
int listLen(ListNode* head){
int len=0;
while(head){
len++;
head=head->next;
}
return len;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lenA=listLen(headA);
int lenB=listLen(headB);
int n;
if(lenA>lenB){
n=lenA-lenB;
while(n--){
headA=headA->next;
}
}
else if(lenB>lenA){
n=lenB-lenA;
while(n--){
headB=headB->next;
}
}
while(headA && headB && headA!=headB){
headA=headA->next;
headB=headB->next;
}
return headA;
}
};
寻找链表交点
本文介绍了一种在两个单链表中找到它们开始相交节点的方法。通过首先测量每个链表的长度,使较长的链表先前进以平衡长度,然后同步遍历两个链表直到找到第一个相同节点。
552

被折叠的 条评论
为什么被折叠?



