p22 链表的相交节点 (leetcode 160)

一:解题思路

 两种方法的Time:O(m+n),Space:O(1)

二:完整代码示例 (C++版和Java版)

第一种方法C++

class Solution 
 {
 public:
     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
     {
         int lenA = 0,lenB=0;

         for (ListNode* p = headA; p != NULL; p = p->next, lenA++);
         for (ListNode* p = headB; p != NULL; p = p->next, lenB++);

         ListNode* p = headA;
         ListNode* q = headB;

         if (lenA > lenB)
         {
             for (int i = 0; i < lenA - lenB; i++)
             {
                 p = p->next;
             }
         }
         else
         {
             for (int i = 0; i < lenB - lenA; i++)
             {
                 q = q->next;
             }
         }

         while (p != q)
         {
             p = p->next;
             q = q->next;
         }

         return p;
     }
 };

第一种方法Java:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB)
  {
         int lenA=0,lenB=0;

         for(ListNode p=headA;p!=null;p=p.next,lenA++);
         for(ListNode p=headB;p!=null;p=p.next,lenB++);

         ListNode p=headA;
         ListNode q=headB;

         if(lenA>lenB)
         {
             for(int i=0;i<lenA-lenB;i++)
             {
                 p=p.next;
             }
         }
         else
         {
             for(int i=0;i<lenB-lenA;i++)
             {
                 q=q.next;
             }
         }

         while(q!=p)
         {
             q=q.next;
             p=p.next;
         }

         return p;
  }
}

第二种方法C++:

class Solution 
 {
 public:
     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
     {
         if (headA == NULL || headB == NULL) return NULL;

         ListNode* p = headA;
         ListNode* q = headB;

         while (p != q)
         {
             p = p == NULL ? headB : p = p->next;
             q = q == NULL ? headA : q = q->next;
         }

         return q;
     }
 };

第二种方法Java:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB)
    {
        if(headA==null||headB==null) return null;
        
        ListNode p=headA;
        ListNode q=headB;
        
        while (p!=q)
        {
            p=p==null?headB:p.next;
            q=q==null?headA:q.next;
        }
        
        return q;
    }
}

 

posted @ 2020-03-12 16:15  repinkply  阅读(173)  评论(0)    收藏  举报