问题描述:输入两个链表:找出他们的第一个公共节点,即两条链表均指向某个节点,两条不同的链表组合成同一条链表。
集合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;
}
}