13.链表-链表公共点

该博客介绍了一种解决寻找两个链表公共节点问题的方法。通过遍历两个链表,当一个链表走到末尾时,将其头部指向另一个链表的头部,继续遍历直至找到相同节点,该节点即为公共节点。示例代码展示了如何实现这个算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

 

两种思路,个人喜欢第一种:

1、L1 l2各自走一遍,如果都到底部还未相遇,则证明l1 l2长度不一样,分别到null后,l1换l2链表头开始走,l2换l1链表头走,然后接着他们就会相遇了,遇到的第一个点就是公共点。因为大家所走的路是相同的。

 

2、用一个stact栈存2个链表的数据,然后开始pop,pop到不相等的,前1个想等的为他们的公共节点。所以需要用到额外的存储空间。

 

下面只给出我第一种思路自己写的程序:

 

package facehandjava.Linked;

public class SameNode {
   
public static void main(String[] args) {

        Node n6 =
new Node(11,null);
        Node n5 =
new Node(9, n6);
        Node n4 =
new Node(7, n5);
       
//共同节点是n4
       
Node n3 = new Node(5, n4);
        Node n2 =
new Node(3, n3);
        Node n1 =
new Node(1, n2);

        Node n33 =
new Node(22, n4);
        Node n22 =
new Node(22, n33);
        Node n11 =
new Node(11, n4);

        Node sameNode = SameNode(n1,n11);
        System.
out.println(sameNode.getVal());
    }

   
public static Node SameNode(Node n1, Node n2) {
        Node node1 = n1;
        Node node2 = n2;
       
while (node1!= node2) {
           
if (node1!= null && node2 != null) {
                node1 = node1.getNext();
                node2 = node2.getNext();
               
if (node1 == node2) {
                   
return node1;
                }
            }
           
if (node1== null) {
                node1 = n2;
                node2 = node2.getNext();
            }
           
if (node2== null) {
                node2 = n1;
                node1 = node1.getNext();
            }
        }
       
return node1;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值