160. Intersection of Two Linked Lists

来源:互联网 发布:影视大全为什么没网络 编辑:程序博客网 时间:2024/05/16 13:24

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.

Credits:
Special thanks to @stellari for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

先把两个指针调到跟尾端距离一样

/** * 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) {        int lenA = 0;        int lenB =0 ;        for(ListNode tmp = headA;tmp!=null;tmp=tmp.next){            lenA++;        }        for(ListNode tmp = headB;tmp!=null;tmp=tmp.next){            lenB++;        }        ListNode tmpA = headA;        ListNode tmpB= headB;        if(lenA>=lenB){                      for(int i =1;i<=lenA-lenB;i++){                tmpA=tmpA.next;            }        }else{            for(int i =1;i<=lenB-lenA;i++){                tmpB=tmpB.next;            }        }        for(;tmpA!=null;){            if(tmpA==tmpB)return tmpA;                        tmpA=tmpA.next;            tmpB=tmpB.next;        }        return null;    }}

0 0
原创粉丝点击