输入两个无环的单链表,找出它们的第一个公共结点。
如果存在公共节点,那么a+c+b=b+c+a,最终指针相遇,如果不存在公共节点,那么最终都指向null,退出循环 (以下代码实现)
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode head1=pHead1;
ListNode head2=pHead2;
while(head1!=head2)
{
if(head1!=null)
head1=head1.next;
else
head1=pHead2;
if(head2!=null)
head2=head2.next;
else
head2=pHead1;
}
return head1;
}
}
三元表达式
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode head1=pHead1;
ListNode head2=pHead2;
while(head1!=head2)
{
head1=(head1==null)?pHead2:head1.next;
head2=(head2==null)?pHead1:head2.next;
}
return head1;
}
}
相似问题:判断两个链表是否存在公共节点
直接比较两个链表的最后一个节点是否相同。
第二遍 1个小时