[leedcode 160] Intersection of Two Linked Lists

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.
      /**
       * Definition for singly-linked list.
       * public class ListNode {
       *     int val;
       *     ListNode next;
       *     ListNode(int x) {
       *         val = x;
       *         next = null;
       *     }
       * }
       */
      public class Solution {
          public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
              //注意,求长度时,可以利用尾节点是否相等进行剪枝,因此需要注意尾节点不能为null
              
              if(headA==null||headB==null) return null;
              int lenA=1;
              ListNode pA=headA;
              while(pA.next!=null){//判断条件,需要利用尾节点
                  lenA++;
                  pA=pA.next;
              }
              int lenB=1;
              ListNode pB=headB;
              while(pB.next!=null){
                  lenB++;
                  pB=pB.next;
              }
              if(pA!=pB) return null;////
              pA=headA;////
              pB=headB;
              if(lenA>lenB){
                  int step=lenA-lenB;
                  for(;step>0;step--){
                      pA=pA.next;
                  }
              }
              if(lenB>lenA){
                  int step=lenB-lenA;
                  for(;step>0;step--){
                      pB=pB.next;
                  }
              }
              while(pA!=null){
                  if(pA==pB) return pA;
                  pA=pA.next;
                  pB=pB.next;
              }
              return null;
          }
      }

       

posted @ 2015-08-01 22:50  ~每天进步一点点~  阅读(120)  评论(0编辑  收藏  举报