leetcode之Intersection of Two Linked Lists

来源:互联网 发布:电脑恢复数据 编辑:程序博客网 时间:2024/05/18 02:04

问题描述如下:

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.
问题链接

cpp代码如下:

class Solution {private:    int getLengthAndEnd(ListNode* head,ListNode*& tail){        tail=head;        int cnt=1;        while(tail->next){            ++cnt;            tail=tail->next;        }        return cnt;    }public:    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        if(headA==NULL||headB==NULL)            return NULL;        ListNode* ta=NULL,*tb=NULL;        int la=getLengthAndEnd(headA,ta);        int lb=getLengthAndEnd(headB,tb);        if(ta!=tb)            return NULL;       if(la>lb){            for(int i=0;i<la-lb;++i)                headA=headA->next;       }       else{            for(int i=0;i<lb-la;++i)                headB=headB->next;       }       while(headA){            if(headA==headB)                return headA;            headA=headA->next;            headB=headB->next;       }    }};


0 0
原创粉丝点击