两个有公共节点链表的第一个公共节点(程序员的浪漫只有程序猿懂)

两个有公共节点链表的第一个公共节点(程序员的浪漫只有程序猿懂)_第1张图片
如题:我们有两种解决办法

第一种

分别计算两个链表长度,然后计算差值,设差值为x,另长的链表先跳x步,然后在另两个链表一块跳,跳到相等的节点停下,此时即为结果。

public class Solution {
     
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
     
      int sizeA=0,sizeB=0;
      ListNode ahead=headA,bhead=headB;
      while(headA!=null){
     
          headA=headA.next;
          sizeA++;
      }
      while(headB!=null){
     
          headB=headB.next;
          sizeB++;
      }
      int cha=Math.abs(sizeB-sizeA);
      if(sizeA>sizeB){
     
          for(int i=0;i<cha;i++){
     
              ahead=ahead.next;
          }
          while(ahead!=bhead&&ahead!=null){
     
              ahead=ahead.next;
              bhead=bhead.next;
          }
          return ahead;
      }
      else{
     
          for(int i=0;i<cha;i++){
     
              bhead=bhead.next;
          }
          while(bhead!=ahead&&bhead!=null){
     
              ahead=ahead.next;
              bhead=bhead.next;
          }
          return bhead;
      }
    }
}

第二种 用一种浪漫的方法解决 a走完a的路,继续走b的,b同样同时走完b的路走a的,当两个人相遇的时候就是我们想要的节点

public class Solution {
     
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
     
      ListNode ahead=headA,bhead=headB;
      while(ahead!=bhead){
     
          ahead=ahead!=null?ahead.next:headB;
          bhead=bhead!=null?bhead.next:headA;
      }

        return ahead;   
    }
}

你可能感兴趣的:(数据结构,java,链表,公共链表,java)