您的位置:首页 > 其它

【LeetCode】Intersection of Two Linked Lists

2014-11-27 21:55 453 查看
查找两个链表的第一个公共节点,如果两个节点的尾节点相同,肯定存在公共节点

方法: 长的链表开始多走 (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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: