码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]Intersection of Two Linked Lists

时间:2014-12-01 22:33:12      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:leetcode   算法   

问题描述:

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.

Credits:
Special thanks to @stellari for adding this problem and creating all test cases.

基本思路:

考虑如果两个链表有交叉点,则到最后一定都是重合的节点,不会分开。

我们可以首先计算出每个链表的长度lenA,lenB。 diff为长链表比短链表长出的节点数。

让长链表先走diff步,然后两个链表同步向后走,检验节点是否想等,地一个想等的节点即为开始重合的位置。

代码:

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {  //C++
        
        int lenA =0,lenB = 0;
        
        ListNode *tmpA = headA;
        while(tmpA != NULL)
        {
            lenA++;
            tmpA = tmpA->next;
        }
        ListNode *tmpB = headB;
        while(tmpB != NULL)
        {
            lenB++;
            tmpB = tmpB->next;
        }
        
        tmpA = headA, tmpB =headB;
        
        int diff;
        if(lenA > lenB)
        {
            diff = lenA - lenB;
            while(diff > 0)
            {
                tmpA = tmpA->next;
                diff--;
            }
        }
        else
        {
            diff = lenB - lenA;
            while(diff > 0)
            {
                tmpB = tmpB->next;
                diff--;
            }
        }
        
        while(tmpA != tmpB)
        {
            tmpA = tmpA->next;
            tmpB = tmpB->next;
        }
        
        return tmpA;
    }


[leetcode]Intersection of Two Linked Lists

标签:leetcode   算法   

原文地址:http://blog.csdn.net/chenlei0630/article/details/41653315

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!