想要精通算法和SQL的成长之路 - 相交链表

这篇具有很好参考价值的文章主要介绍了想要精通算法和SQL的成长之路 - 相交链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 相交链表(双指针)

原题链接
想要精通算法和SQL的成长之路 - 相交链表,精通算法和SQL之路,算法,链表
思路如下:

1.我们假设 headA链表的长度为 aheadB链表的长度为b。两个链表的公共部分长度为c(如果存在),公共节点为node

  • 头结点headAnode前,有a-c个节点。
  • 头结点headBnode前,有b-c个节点。

2.那么我们用两个指针,AB。分别指向两个链表的头节点。

  • 指针A走完链表headA再走链表headB。走到node节点的时候,走过的步数为:a + (b - c)
  • 指针B走完链表headB再走链表headA。走到node节点的时候,走过的步数为:b + (a - c)

首先,两个指针走过的步数一定是相等的,但是对于返回结果而言,我们可以根据c来区分:

  • 如果两个链表存在相交链表,那么c肯定非空,此时指针A或者B都是指向node节点。
  • 如果两个链表无相交部分,那么c的值为0,也就是说此时A或者B的指向是null节点。

因此我们选哪个都可以,最后返回任意一个指针即可,代码如下:文章来源地址https://www.toymoban.com/news/detail-733607.html

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    ListNode a = headA, b = headB;
    while (a != b) {
    	// 如果指针a为null,那么继续遍历headB链表,否则继续遍历headA链表。指针b同理
        a = a == null ? headB : a.next;
        b = b == null ? headA : b.next;
    }
    return a;
}

到了这里,关于想要精通算法和SQL的成长之路 - 相交链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 想要精通算法和SQL的成长之路 - 滑动窗口和大小根堆

    想要精通算法和SQL的成长之路 - 系列导航 先来说下大小根堆是什么: 大根堆:栈顶元素最大(上图左侧部分),栈底至栈顶元素值递增。 小根堆:栈顶元素最小(上图右侧部分),栈底至栈顶元素值递减。 在 Java 当中,可以用什么来表示大小根堆? 小根堆: 大根堆: 大小

    2024年02月07日
    浏览(43)
  • 想要精通算法和SQL的成长之路 - 二叉树的序列化和反序列化问题

    想要精通算法和SQL的成长之路 - 系列导航 二叉树的层序遍历 像这种从上至下并且按层打印的,可以称之为 二叉树的广度优先搜索( BFS ) 。而这类算法往往借助 队列的一个先入先出特性 来实现。 那么有这么几个步骤: 1.特殊处理还有初始化动作。 2. BFS 循环: 最终完整代

    2024年02月07日
    浏览(50)
  • 【每日算法】【160. 相交链表】

    ☀️博客主页:CSDN博客主页 💨本文由 我是小狼君 原创,首发于 CSDN💢 🔥学习专栏推荐:面试汇总 ❗️游戏框架专栏推荐:游戏实用框架专栏 ⛅️点赞 👍 收藏 ⭐留言 📝,如有错误请指正 📆 未来很长,值得我们全力奔赴更美好的生活✨ 老规矩,先介绍一下 Unity 的科

    2024年02月08日
    浏览(60)
  • 斗破苍穹算法——萧炎的成长之路(二)

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ 萧炎是一

    2024年02月14日
    浏览(37)
  • 斗破苍穹算法版—萧炎的成长之路

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ 萧炎是一

    2024年02月16日
    浏览(37)
  • 斗破苍穹算法版—萧炎的成长之路(一)

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ 萧炎是一

    2024年02月16日
    浏览(42)
  • 算法刷题Day4 两两交换链表中的节点+删除链表的倒数第N个结点+链表相交+环形链表

    使用dummy节点可以极大地简化过程 有个地方折磨了我有一会儿,是粗心导致的,而且提示的错误也很难发现是哪里导致的。就是在case为 head = [1], n = 1 时,最后释放了 tmp 之后(此时 tmp 刚好指向 head ,我还 return head; ,意思就是操作了已经被我释放的内存, leetcode 就报错了

    2024年02月09日
    浏览(49)
  • 【leetcode刷题之路】初级算法(2)——链表+树+排序和搜索+动态规划

    3.1 【链表】删除链表中的节点 https://leetcode.cn/problems/delete-node-in-a-linked-list/ 给出的就是要删除的那个节点,直接前后移动就行了。 3.2 【双指针】删除链表的倒数第 N 个结点 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 利用双指针left和right,首先让right遍历n个节点,再让两

    2024年02月10日
    浏览(50)
  • 【链表OJ】相交链表 环形链表1

    前言:  💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣上链表OJ题目 目录 一.leetcode 160. 相交链表 1.问题描述: 2.解题思路: 二.leetcode 141.环形链表 1.问题描述: 2.代码思路: 3.问题证明: 来源 :160. 相交链表 - 力扣(LeetCode) 给你

    2024年02月10日
    浏览(41)
  • C语言:相交链表

     Lei宝啊: 个人主页 愿美好与我们不期而遇 给你 两个单链表 的 头节点   headA 和  headB   ,请你 找出并返回两个单链表 相交的起始节点 。如果两个链表不存在相交节点,返回   null   struct ListNode * getIntersectionNode ( struct ListNode *headA, struct ListNode *headB ) { } 走差距步,比地址

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包