Leetcode:160. Intersection of Two Linked Lists(JAVA)

来源:互联网 发布:临时用电计算软件 编辑:程序博客网 时间:2024/06/06 18:44

【问题描述】

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.

【思路】

如果两个ListNode尾节点相同,则一定存在公共节点。

将长的List移步size1-size2步长后开始依次比较,直到找到相同节点后返回。

【code】

/** * 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) {if (headA == null || headB == null) {return null;}ListNode t1 = headA;ListNode t2 = headB;int size1 = 1, size2 = 1;while (t1.next != null) {size1++;t1 = t1.next;}while (t2.next != null) {size2++;t2 = t2.next;}if (t1.val != t2.val) {return null;} else {int t = Math.abs(size1 - size2);if (size1 > size2) {t1 = headA;t2 = headB;} else {t1 = headB;t2 = headA;}while ((t--) != 0) {t1 = t1.next;}while (t1 != null && t2 != null && t1 != t2) {t1 = t1.next;t2 = t2.next;}return t1;}    }}


0 0
原创粉丝点击