两个链表的第一个公共节点(Java实现)

简介: 两个链表的第一个公共节点(Java实现)

两个链表的第一个公共节点(Java实现)


思路: 我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。


20200312143814187.png

这样,当它们相遇时,所指向的结点就是第一个公共结点。

package Day40;
/**
 * @Author Zhongger
 * @Description 找出两个链表相交的结点
 * @Date 2020.3.12
 */
public class FindCommentNode {
    public static void main(String[] args) {
        ListNode commentNode = new ListNode(5);
        ListNode headA = new ListNode(0);
        ListNode listNodeA1 = new ListNode(1);
        ListNode listNodeA2 = new ListNode(2);
        ListNode listNodeA3 = new ListNode(3);
        ListNode listNodeA4 = new ListNode(4);
        headA.next=listNodeA1;
        listNodeA1.next=listNodeA2;
        listNodeA2.next=listNodeA3;
        listNodeA3.next=listNodeA4;
        listNodeA4.next=commentNode;
        ListNode headB = new ListNode(0);
        ListNode listNodeB1 = new ListNode(1);
        ListNode listNodeB2 = new ListNode(3);
        headB.next=listNodeB1;
        listNodeB1.next=listNodeB2;
        listNodeB2.next=commentNode;
        FindCommentNode findCommentNode = new FindCommentNode();
        System.out.println(findCommentNode.getIntersectionNode(headA, headB));
    }
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int length1 = getLength(headA);
        int length2 = getLength(headB);
        ListNode ptr1 = headA, ptr2 = headB;
        if (length1 < length2) {
            ptr1 = headB;
            ptr2 = headA;
        }
        int count = Math.abs(length1 - length2);
        while (ptr1 != null && count > 0) {
            ptr1 = ptr1.next;
            count--;
        }
        while (ptr1 != null && ptr2 != null) {
            if (ptr1 == ptr2) {
                return ptr1;
            }
            ptr1 = ptr1.next;
            ptr2 = ptr2.next;
        }
        return null;
    }
    private int getLength(ListNode head) {
        int count = 0;
        while (head != null) {
            count++;
            head = head.next;
        }
        return count;
    }
}
class ListNode{
    int val;
    ListNode next;
    public ListNode(int val){
        this.val=val;
    }
    @Override
    public String toString() {
        return "ListNode{" +
                "val=" + val +
                '}';
    }
}


相关文章
|
4月前
|
机器学习/深度学习 算法
24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交
1. **两两交换链表中的节点**:通过引入虚拟头结点,使所有节点都能采用统一的交换逻辑,避免对头结点单独处理。 2. **删除链表的倒数第N个节点**:利用双指针技巧,让快慢指针保持N个节点的距离,当快指针到达末尾时,慢指针正好指向待删除节点的前一个节点。 3. **链表相交**:先计算两链表长度并调整起点,确保从相同距离末尾的位置开始遍历,从而高效找到相交节点或确定无交点。 以上方法均在时间复杂度和空间复杂度上进行了优化,适合用于理解和掌握链表的基本操作及常见算法设计思路。
|
5月前
|
Java 区块链 网络架构
酷阿鲸森林农场:Java 区块链系统中的 P2P 区块同步与节点自动加入机制
本文介绍了基于 Java 的去中心化区块链电商系统设计与实现,重点探讨了 P2P 网络在酷阿鲸森林农场项目中的应用。通过节点自动发现、区块广播同步及链校验功能,系统实现了无需中心服务器的点对点网络架构。文章详细解析了核心代码逻辑,包括 P2P 服务端监听、客户端广播新区块及节点列表自动获取等环节,并提出了消息签名验证、WebSocket 替代 Socket 等优化方向。该系统不仅适用于农业电商,还可扩展至教育、物流等领域,构建可信数据链条。
|
11月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
12月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
130 0
|
12月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
84 3
|
12月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
125 0
LeetCode第二十四题(两两交换链表中的节点)
|
12月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
131 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
12月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
199 1
|
12月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
300 4

热门文章

最新文章