码迷,mamicode.com
首页 > 其他好文 > 详细

[leedcode 160] Intersection of Two Linked Lists

时间:2015-08-01 23:29:05      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

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;
          }
      }

       

[leedcode 160] Intersection of Two Linked Lists

标签:

原文地址:http://www.cnblogs.com/qiaomu/p/4694836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!