两个链表的第一个公共结点

题目描述

输入两个链表,找出它们的第一个公共结点。
首先遍历俩个链表得到它们的长度,以及长的链表多几个结点。在第二次遍历的时候,在较长的链表先走长度之差步,接着再同时在俩个链表遍历,找到的第一个相同的结点就是她们的第一个公共结点
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    int length(ListNode *head){
        ListNode *p=head;
        int l=0;
        while(p!=NULL)
            {
             p=p->next;
             l++;
        }
        return l;
    }
  ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
        int len1=length(pHead1);
         int len2=length(pHead2);
      int d;
      ListNode *p=pHead1;
       ListNode *q=pHead2;
       if(len1>len2){
            d=len1-len2;
           while(d--)
                p=p->next;
       }
       else{
           d=len2-len1;
           while(d--)
               q=q->next;
          
       }
      while(p!=q&&p!=NULL&&q!=NULL){
          p=p->next;
          q=q->next;
      }
       ListNode *head=p;
       return head;
       
    }
    
};

 

 
posted @ 2015-11-04 21:20  疯狂的癫子  阅读(181)  评论(0编辑  收藏  举报