首页 > 其他分享 >5.23链表相交

5.23链表相交

时间:2024-05-23 22:57:18浏览次数:16  
标签:pB nullptr 相交 链表 pA 5.23 headB headA c1

链接如下:https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/solutions/1395092/lian-biao-xiang-jiao-by-leetcode-solutio-2kne/
这道题比较简单,暴力循环就可以结束,但是看官方题解还是有些技巧在的,索性也就记录一下。先说下我自己的思路,我自己的思路就是类似两个for循环,一个指针不动,另一个指针遍历整个链表。然后依次if判断,如果相同的话就return ,这样时间复杂度就是O(n2)了。
但是官方题解如下:

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if (headA == nullptr || headB == nullptr) {
            return nullptr;
        }
        ListNode *pA = headA, *pB = headB;
        while (pA != pB) {
            pA = pA == nullptr ? headB : pA->next;
            pB = pB == nullptr ? headA : pB->next;
        }
        return pA;
    }
};

这个技巧性太强了,本质上把两个分叉的数组变成了环形的数组,变成了一个数学问题。例如

          [a1 ,a2,                                         headA的路径:a1->a2->c1->c2->b1->b2->b3->b4->c1
                  c1, c2]                                              1   2   3   4   5   6   7   8   9   
     [b1, b2,b3,b4                                         headB的路径: b1->b2->b3->b4->c1->c2->a1->a2->c1

走10次就会相遇,至此结束。

标签:pB,nullptr,相交,链表,pA,5.23,headB,headA,c1
From: https://www.cnblogs.com/ink-bai/p/18209530

相关文章

  • PTA——链表——答案与分析
    7-4约瑟夫环N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。请按退出顺序输出每个退出人的原序号。输入格式:输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。输出格式:按......
  • 删除链表给定值
    今天是我坚持刷题的第二天,加油!删除链表给定值输入:head=[4,5,1,9],val=5输出:[4,1,9]解释:给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为4->1->9./***Definitionforsingly-linkedlist.*functionListNode(val){*t......
  • 反转链表
    最近想认真学一下数据结构和算法,之前也学过,不过学一段时间就不当回事了,这次争取好好学一段时间,今天是第一天,我准备一天刷一道leetcode题,简单,中等,难都行,主要是建立一个习惯。加油!反转链表/***Definitionforsingly-linkedlist.*publicclassListNode{*intval......
  • 代码随想录算法训练营第四天 | 23.两l两交换链表中的节点 19.删除链表的倒数第N个节点
    23.两两交换链表中的两个节点题目链接文章讲解视频讲解时间复杂度o(n)空间复杂度o(1)tips:画图,并将每一步操作用伪代码写出来,然后将代码理顺可以避免修改代码的麻烦初始化的时候就要将previous初始化为current的前一个节点,这样可以保证循环的第一步满足循环要求cla......
  • 代码随想录算法训练营第第二天 | 24. 两两交换链表中的节点 、19.删除链表的倒数第N
    两两交换链表中的节点用虚拟头结点,这样会方便很多。本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点。题目链接/文章讲解/视频讲解:https://programmercarl.com/0024.两两交换链表中的节点.html/***Definitionforsingly-li......
  • 稀疏矩阵 - 十字链表 & 快速转置
    十字链表每个稀疏矩阵非零元素都是一个结点,数据域存储的是所在行、所在列和元素值,有两个指针域,分别存储的是指向与该元素同行的下一个非零元素和同列的下一个非零元素的指针。所以一个m行n列的稀疏矩阵,(最多)总共有(m+n)个链表,即(在每行每列都有非零元素的情况下,当然这样可能并不算......
  • 代码随想录训练营第三天 | 203.移处链表元素 707.设计链表 206.反转链表
    203.移除链表元素题目链接https://leetcode.cn/problems/remove-linked-list-elements/文章讲解https://programmercarl.com/0203.移除链表元素.html#算法公开课视频讲解https://www.bilibili.com/video/BV18B4y1s7R9/?vd_source=2b5b33d3d692b0064daff4e58957fc82tips:对......
  • 手撕链表(自存)
    #include<stdio.h>#include<stdlib.h>typedefintE;typedefstructnode{Eval;structnode*next;}ListNode;ListNode*list_creat(){ListNode*list=malloc(sizeof(ListNode));returnlist;}voidpush_back(ListNode*List......
  • 力扣刷题笔记-21 合并两个有序链表
    其实不回答就是答案双指针classSolution{publicListNodemergeTwoLists(ListNodelist1,ListNodelist2){ListNodedummy=newListNode(-1);ListNodep=dummy;ListNodep1=list1,p2=list2;while(p1!=null&&p2!=nu......
  • 删除单向链表中数据最小的结点
    (1)算法的基本设计思想要找到链表中数据最小的结点,可以使用4指针法。具体步骤如下:定义4个指针,分别命名为MinNodeprev、MinNode、CurrentNodePrev、CurrentNode,MinNodeprev、CurrentNodePrev指向链表的头结点,MinNode、CurrentNode指向链表的首结点。同时移动CurrentNodePrev、Cur......