143 找出两个链表的第一个公共节点

发布时间:2024年01月23日

问题描述:输入两个链表:找出他们的第一个公共节点,即两条链表均指向某个节点,两条不同的链表组合成同一条链表。

集合Set求解:首先将第一条链表中所有的list节点放入集合中,再来遍历。

public TreeNode firstCoNode(ListNode root1,ListNode root2)
{
Set<TreeNode>set=new HashSet<>();
ListNode curList1=root1;
while(curList1!=null)
{
set.add(curList1);
curList1=curList1.next;
}
listNode curList2=root2;
while(curList2!=null)
{
if(set.contains(curList2)){return curList2;}
}
return null;
}

先计算链表长度的方式:首先计算两个链表的长度,对于长度较长的链表,定义指针向前走,走到长度相同的位置,然后两个链表同时往前走,直到遇到相同的节点为止。找到节点。

public TreeNode?firstCoNode(listNode root1,listNode root2)
{
int length1=0;
int length2=0;
listNode head1=root1;
listNode head2=root2;
while(head1!=null)
{
length1++;
head1=head1.next;
}
while(head2!+null)
{
length2++;
head2=head2.next;
}
listNode longer;
listNode shorter;
if(length1>length2)
{
longer=root1;
shorter=root2;
}else
{
longer=root2;
shorter=root1;
}
for(int i=0;i<Math.abs(length1-length2);i++)
{
longer=longer.next;
}
while(longer!=null)
{
if(longer==shorter){return longer;}
longer=longer.next;
shorter=shorter.next;
}
}

文章来源:https://blog.csdn.net/qq_52299902/article/details/135771402
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。