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

Intersection of Two Linked Lists--leetcode

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

标签:leetcode   算法   

原题链接:https://oj.leetcode.com/problems/intersection-of-two-linked-lists/

题目大意:给定两个单链表,若相交则找出第一个交点。

解题思路:如果两个无环单链表相交,则必定尾部结点为同一个结点。设定两个指针,若从两个链表的表头同时遍历,很明显不能找到交点。但若将较长的链表截去长出来的一部分,然后两个指针同时遍历,则第一次两个指针相等的结点明显是所求结点。若走到链表尾,任然未相交,则两个链表未相交。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if(headA==NULL||headB==NULL)
            return NULL;
        ListNode *p1,*p2;
        p1=headA,p2=headB;
        int lenA=0,lenB=0;
        while(p1){
            lenA++;
            p1=p1->next;
        }
        while(p2){
            lenB++;
            p2=p2->next;
        }
        p1=headA,p2=headB;
        while(lenA<lenB){
            p2=p2->next;
            lenA++;
        }
        while(lenB<lenA){
            p1=p1->next;
            lenB++;
        }
        while(p1&&p2){
            if(p1==p2)
                return p1;
            p1=p1->next;
            p2=p2->next;
        }
        return NULL;
    }
};

因为没有环,所以题目比较简单。题目比较经典,可以扩展到有环的情况下,大家可以考虑下哈。

Intersection of Two Linked Lists--leetcode

标签:leetcode   算法   

原文地址:http://blog.csdn.net/u010367506/article/details/41650949

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