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

来源:互联网 发布:单片机开发板有什么用 编辑:程序博客网 时间:2024/06/08 02:40

题目:

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

输入:

单链表A:4,3,2,1,单链表:3,2,1

输出:

3

解题思路:

1、得到两个链表的长度,链表A减去链表B的长度得到变量DPSLength。

2、如果变脸DpsLength大于0,则链表A往前走DPSLength步,否则,链表B往前走DPSLength步。

3、接下来,两个链表同时遍历,直到找到相同的节点。

4、(没有写的解法)当然还有另外一种解法是需要利用辅助栈的,因为根据两个链表的特点,公共节点是出现在两个链表尾部的,只需要遍历一遍把他存入栈中,然后不停的再从栈中取出来,对比两个节点是否相同,那么公共节点由于是后进先出的缘故,所以,他一定是栈中最后一个相同的公共节点,这个节点就是我们要找的节点了。

Java实现代码:

public static void main(String[] args) {// TODO Auto-generated method stLinked linkeder=new Linked();LinkNode node1=new LinkNode(1);LinkNode node2=new LinkNode(2);LinkNode node3=new LinkNode(3);LinkNode node4=new LinkNode(4);linkeder.insertFirst(node1);linkeder.insertFirst(node2);linkeder.insertFirst(node3);linkeder.insertFirst(node4);Linked linked2=new Linked();linked2.insertFirst(node1);linked2.insertFirst(node2);linked2.insertFirst(node3);System.out.println(findFirstComonNode(linkeder, linked2).data);}private static LinkNode findFirstComonNode(Linked head1,Linked head2){int nLnegth1=head1.getListSize();int nLnegth2=head2.getListSize();int dpsLength=nLnegth1-nLnegth2;LinkNode node1=head1.header;  //LongLinkNode node2=head2.header;  //shartif(nLnegth2>nLnegth1){dpsLength=nLnegth2-nLnegth1; node1=head2.header; node2=head1.header;}for(int i=0;i<dpsLength;i++){node1=node1.next;}while(node1!=null && node2!=null && node1!=node1){node1=node1.next;node2=node2.next;}LinkNode nodeCommon=node1;return nodeCommon;}



0 0