Intersection of Two Linked Lists

来源:互联网 发布:Java:什么是方法重写 编辑:程序博客网 时间:2024/06/13 10:24

题目: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:    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA==NULL ||headB==NULL)return NULL;int lenHeadA=0,lenHeadB=0;ListNode *p=headA,*q=headB;//求链表headA和headB的长度while(p){p=p->next;lenHeadA++;}p=headA;while(q){q=q->next;lenHeadB++;}q=headB;int distance=0;if(lenHeadA>lenHeadB){distance=lenHeadA-lenHeadB;for(int i=0;i<distance;i++)p=p->next;}if(lenHeadA<lenHeadB){distance=lenHeadB-lenHeadA;for(int i=0;i<distance;i++)q=q->next;}//循环结束的条件是p==q!=null(有相交点) //或者是p==q==null(无相交点)while(p!=q){p=p->next;q=q->next;}return p;};


0 0
原创粉丝点击