【LeetCode】Intersection of Two Linked Lists

来源:互联网 发布:远视 眼镜 知乎 编辑:程序博客网 时间:2024/05/18 01:43

查找两个链表的第一个公共节点,如果两个节点的尾节点相同,肯定存在公共节点

方法: 长的链表开始多走 (h1的数量 - h2的数量)步,然后和短链表同步往下走,遇到的第一个相同的节点就是最早的公共节点


/** * 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 h1 = headA;        ListNode h2 = headB;        int count1 = 1, count2 = 1;        while(h1.next != null){            count1++;            h1 = h1.next;        }        while(h2.next != null){            count2++;            h2 = h2.next;        }        if(h1 != h2) return null;        else{            int count = Math.abs(count1 - count2);            if(count2 > count1){                h1 = headB;                h2 = headA;             }            else{                h1 = headA;                h2 = headB;            }            while((count--) > 0){                h1 = h1.next;            }            while(h1 != null&&h2 != null && h1 != h2){                h1 = h1.next;                h2 = h2.next;            }            return h1;        }    }}



0 0
原创粉丝点击