文章524
标签277
分类67

算法:两个链表的第一个公共结点


两个链表的第一个公共结点

两个链表的第一个公共结点

输入两个链表,找出它们的第一个公共结点。

(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)


分析

设定两个指针分别从list1和list2开始.

list1当到达链表1结尾时, 继续从链表2开始; list2同理;

最后:

  • 长度相同时

    • 有公共结点,第一次就遍历到;
    • 没有公共结点,走到尾部NULL相遇,返回NULL
  • 长度不同时

    • 有公共结点,第一遍差值就出来了,第二遍一起到公共结点
    • 没有公共,一起到结尾NULL

代码

1
2
3
4
5
6
7
8
9
10
public class Solution {
public ListNode FindFirstCommonNode(ListNode head1, ListNode head2) {
ListNode list1 = head1, list2 = head2;
while (list1 != list2) {
list1 = list1 == null ? head2 : list1.next;
list2 = list2 == null ? head1 : list2.next;
}
return list1;
}
}

本文作者:Jasonkay
本文链接:https://jasonkayzk.github.io/cn/1996/07/27/%E7%AE%97%E6%B3%95-%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%85%AC%E5%85%B1%E7%BB%93%E7%82%B9/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可