刷leetcode:Intersection of Two Linked Lists

来源:互联网 发布:web 关联数据库 编辑:程序博客网 时间:2024/06/05 11:23

题号:160 题目

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.

题目中要求找到两个链表的相交点。具体思路如下:

(1)求得两个链表的长度,

(2)找到较长的链表中和较短链表的长度相等的点。也就是说如果链表A长度为5,链表B长度为3,那么在链表中的前两个肯定不会和链表B相交,这一步我们要做的就是找到链表A中的第三个节点。

(3)遍历链表,判断对应位置的值是否相等。


具体代码如下:已AC

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */  /**  * Date:2015-03-06  * Author:Mandy  * Number:160  * */public class Solution {    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        if (headA == null || headB == null)            return null;        ListNode pA=headA,pB=headB;        int lengthA=0,lengthB=0;        //get length of each ListNode        while(pA!=null){            lengthA++;            pA=pA.next;        }        while(pB!=null){            lengthB++;            pB=pB.next;        }                //find intersection index        pA=headA;pB=headB;        int diff=0;        if(lengthA>=lengthB){            diff=lengthA-lengthB;            while(diff>0){                pA=pA.next;                diff--;            }        }else{            diff=lengthB-lengthA;            while(diff>0){                pB=pB.next;                diff--;            }        }                while(pA!=null&&pB!=null){            if(pA.val==pB.val){               return pA;                }            pA=pA.next;            pB=pB.next;        }        return null;    }}


0 0
原创粉丝点击