您的位置:首页 > 其它

每天一道LeetCode-----寻找两个链表的交点

2018-02-10 15:22 621 查看

Intersection of Two Linked Lists

原题链接Intersection of Two Linked Lists



两个链表,从某个节点开始相交,找到相交节点

方法很多,简单列举一下

将其中一个链表的头尾相连,问题转化为求环入口节点

用两个栈分别记录两个链表的节点,再弹出,找到最后一个相等的节点

将长的链表移动长度差的距离,然后同时移动两个链表,找到第一个相等的节点

采用第三种方法,代码如下

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
auto lenA = listLength(headA);
auto lenB = listLength(headB);
if(lenA > lenB)
{
for(auto i = 0; i != lenA - lenB; ++i)
headA = headA->next;
}
else
{
for(auto i = 0; i != lenB - lenA; ++i)
headB = headB->next;
}
while(headA && headB && headA != headB)
{
headA = headA->next;
headB = headB->next;
}
return headA;
}
private:
int listLength(ListNode* head)
{
int len = 0;
while(head)
{
++len;
head = head->next;
}
return len;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode
相关文章推荐