首页 > 其他分享 >LeetCode 热题 100 之 160. 相交链表

LeetCode 热题 100 之 160. 相交链表

时间:2023-07-17 11:14:10浏览次数:39  
标签:nodea nodeb 相交 节点 链表 100 next 热题

题目描述

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交:

image

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

自定义评测:

评测系统 的输入如下(你设计的程序 不适用 此输入):

intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
listA - 第一个链表
listB - 第二个链表
skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at '8'
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。

提示:

listA 中节点数目为 m
listB 中节点数目为 n
1 <= m, n <= 3 * 104
1 <= Node.val <= 105
0 <= skipA <= m
0 <= skipB <= n
如果 listA 和 listB 没有交点,intersectVal 为 0
如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]

思路

由相交部分后的节点都一样,相交往后链表一样长,因此可以判断链表哪个长,定义两个指针,分别指向两个链表,长的链表线多走长出来的部分,走完后,两个指针同步往后走,每同步走一步,则判断一下两个指针是否指向同一个,若是则返回指针,若不是则一直走到找到或者为空.

代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
        lena = 0
        lenb = 0
        nodea =headA
        nodeb = headB
        while(nodea!=None):
            lena+=1
            nodea= nodea.next
        while(nodeb!=None):
            lenb+=1
            nodeb= nodeb.next
        # print(lena,lenb)
        nodea =headA
        nodeb = headB
        if(lena >lenb):
            temp =lena-lenb
            while(temp):
                nodea =nodea.next
                temp-=1
           
        else:
            temp =lenb-lena
            while(temp):
                nodeb =nodeb.next
                temp-=1



        while(nodea!=None):
            if(nodea==nodeb):
                return nodea
            else:
                nodea = nodea.next
                nodeb = nodeb.next
        return None

标签:nodea,nodeb,相交,节点,链表,100,next,热题
From: https://www.cnblogs.com/anamzingclown/p/17559456.html

相关文章

  • LeetCode 热题 100 之 15. 三数之和
    题目描述给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nums=[-1,0,1,2,-......
  • LeetCode 热题 100 之 11. 盛最多水的容器
    题目描述给定一个长度为n的整数数组 height 。有 n 条垂线,第i条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例1:输入:[1,8,6,2,5,4,8,3......
  • 第100篇,写给最爱的人,一周年快乐
    这篇没有渲染,没有图片,就是我想对你重新表白。正好这是我第100篇文章,用这种形式也算是我的一份小礼物吧。一年前,你用一句“你生日这天把我送给你应该是你最想要的礼物了吧”,“空着手”就答应了我的追求,你也说“从一个人到两个人,从卸下防备到开怀大笑”。再到这一年里发生的所有事......
  • redis-server CPU 100%
    如何实现"redis-serverCPU100%"介绍在本文中,我将指导你如何通过一系列步骤来实现"redis-serverCPU100%"。这个过程可能会导致服务器负载升高,因此请谨慎操作,并确保你在实验环境中进行。整体流程在下面的表格中,我将列出实现这个目标的步骤和对应的代码:步骤描述1......
  • 反转链表
    `/**Definitionforsingly-linkedlist.structListNode{intval;structListNode*next;};*/structListNode*reverseList(structListNode*head){structListNode*newhead=NULL,tmp;while(head){/tmp=head->next;head->next=newhead;......
  • 用java写一个逆置单链表
    用Java写一个逆置单链表单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用。逆置单链表是指将原来的单链表中的节点顺序颠倒过来。在这篇文章中,我们将使用Java来实现逆置单链表的功能。我们将会介绍单链表的基本概念,并给出逆置单......
  • 用java创建一个单链表
    使用Java可以很方便地创建和操作数据结构,其中包括单链表。单链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。这种数据结构可以用于实现队列、栈、链表等等。在本文中,我们将学习如何使用Java创建一个单链表,并演示一些基本的操作。首先,我......
  • 数据结构练习笔记——创建有序单链表
    创建有序单链表【问题描述】为从键盘终端输入的m个整数创建带头结点的有序单链表存储结构,使输入的数据元素在单链表中按照元素值递增有序。【输入形式】第一行:单链表中元素个数m第二行:单链表中的m个整数【输出形式】按递增有序形式输出m个整数【样例输入】513245【......
  • Java性能优化-测试数组和链表在查询和添加删除时性能对比
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751上面在使用JMH时测试了Java中数组和链表在进行头部插入时的对比结果。下面分别对比在头部、中部、尾部分别进行查询和......
  • C语言:数据结构之单链表(四)
    本篇谈一谈单链表的改,具体操作就是找到他,然后修改元素即可,上一篇有相关代码,可以参考。改函数代码如下:voidCorrect(LinkListheader,intsite_,charletter_){LinkListq=Search_Site(header,site_);q->letter=letter_;}main函数如下:(修改第6,......