比较两个单链表是否相等——高手教你少用if,写出简洁代码

一:单链表——④判断两个单链表是否相交 题目:输入两个链表的头节点,判断这两个链表是否存在相交 链表的定义如下: typedef int Elemtype; typedef struct ListNode { Elemtype data;//值域 ListNode *m_pNext;//指针域 }ListNode,*PListNode; 看到这个题目后大多数的人的第一反应应该就是,判断这两个链表的任意一个节点的指针是... 阅读详情

现在问题是这样的,给你两个单链表,让你比较他们是否相等,比如:
1. 1->2->3_null 和 1->3->null不相等
2. 2->4->5->null 和 2->4->5-null相等
也就是说两个链表的节点个数相同,并且节点所含元素要想到。

其实说实话,如果是让我比较的话,我会先比较两个为空,不为空,或者一个为空一个不为空的情况。然后对于均不为空的情况,会依次比较当一个节点不为空时,另一个链表中节点的情况。哇喔,听起来就有好多if语句要用,估计写出来,对于读者来说,也是一大头痛的事。

然而,同样的问题,高手就会写出很简洁的代码,看完你就会明白,对于编程你还有很大的进步空间:

/*
  Compare two linked lists A and B
  Return 1 if they are identical and 0 if they are not. 
  Node is defined as 
  class Node {
     int data;
     Node next;
  }
*/
int CompareLists(Node headA, Node headB) {
    Node p = headA;
    Node q = headB;
    /*依次比较两个移动节点,直击问题核心,即,对于相等的链表,移动指针p、q不为空且值相等时*/
    while(p!=null && q!=null && p.data==q.data ){
        p = p.next;
        q = q.next;
    }
    /*跳出循环后,看此时的p、q是否相等。这样同时考虑了两个链表若均为空,怎返回相等,如果是跳出循环p、q仍然相等,等相等。否则就是不相等,可能是因为两个链表长度不等,也可能是因为中间元素不同*/
    return p==q?1:0; //三目运算的好处。。。
}
【面试题】-判断两个单链表是否相交并求出相交的第一结点 问题描述判断两个单链表是否相交,如果相交,给出相交的第一个点(假设两个链表都不存在环)。相交的链表示意图如下所示。 解题思路方法一两个没有环的链表如果是相交于某一结点,如上图所示,这个结点后面都是共有的。所以如果两个链表相交,那么两个链表的尾结点的地址也是一样的。程序实现时分别遍历两个单链表,直到尾结点。判断尾结点地址是否相等即可。时间复杂度为O(L1+L2)。方法二代码实现方法一void Is_ 阅读详情

相关推荐

判断一个存放整数序列的单链表是否对称——栈的应用

基本思想: 扫描链表的所有节点并一一进栈,然后再扫描链表,和栈顶元素作比较,如果都相同,返回true,否则返回false package pac1; class Node{ public Node next; //指针域 public int data; //数据域 public Node(int data) { this.data = data; } public vo

fandoudou123的专栏 3851

线性表练习之Example006-比较两个有序链表是否相等

设有两个用有序链表表示的集合 A 和 B,设计一个算法,判断它们是否相等。

二木成林 2486

6-40 单链表判断相同*

说明:data 为数据域。next 为指针域,指示后继结点。请编写函数,判断两个带附加头结点的单链表是否相同。

燕朝铭的博客 556

链表知识点(十三)【判断两个链表是否相等】

typedef  struct lnode {        int  data;        struct lnode *next; }Lnode,*PLnode; //带头结点  int List_Equal(PLnode Head1,PLnode Head2)  {         PLnode p1;         PLnode p2;      if(Head1

u012512762的专栏 2646

告别复杂模型:用UFLD算法5分钟搞定车道线检测(附Python代码)

本文介绍了UFLD(Ultra Fast Lane Detection)算法在车道线检测中的高效应用,仅需5行核心代码即可实现实时检测,特别适合边缘计算设备。通过对比传统方法,UFLD在推理速度、模型大小和硬件需求上具有显著优势,是深度学习领域轻量级解决方案的典范。

weixin_27872611的博客 286

西门子精致面板TP1200 历史数据(历史数据、审计追踪) 移存到网络路径

TP1200 审计追踪

zhang080602的博客 5768

数据结构 链表 算法问题总结

数据结构 链表 算法问题总结 public static class ListNode{ int val; ListNode next; ListNode(int x) { val =x; next =null; } } 一、找出两个链表的交点(结点) Leetcode 例如以下示例中 A 和 B 两个链表相交于 c1: A: a1 → a2 ↘

ZYF__2015的博客 655

Globus数据下载全攻略:从零配置到批量下载大文件(附常见问题解决)

本文详细介绍了Globus数据下载的全流程,从零配置到批量下载大文件的实用技巧,包括环境准备、高级传输策略、性能优化及常见问题解决方案。Globus作为科研数据的高效传输工具,通过并行流传输和自动校验技术,显著提升大规模数据传输的效率和可靠性。

u9v0w的博客 662

链表问题集锦(一)

原文站点:https://senitco.github.io/2018/02/01/data-structure-linkedlist/ 将数据结构中一些经典的链表问题做一个总结归纳。 单链表结点定义: struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {

Zachary_Co的博客 677

win11禁止更新,草履虫教程

本文介绍了彻底禁止Windows 11系统更新的组合方法,包括禁用核心服务、修改注册表、关闭计划任务和使用组策略(专业版适用)。作者特别提醒,禁止更新会影响系统安全性,建议实体机保持更新,仅虚拟机等特殊情况下使用这些方法。同时强调即使禁用更新,也应定期手动检查重要安全补丁。文章最后附上了作者的个人网站信息。

testwzc1的博客 558

Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得...

wl_Honest的博客 1万+

判断两个单链表是否相交

文章转自: http://c.biancheng.net/data_structure/linear_list/ 所谓相交,是指有公共的部分,而 2 个单链表相交,则意味着它们有公共的节点,公共节点的数量可以是 1 个或者多个。 单链表是线性表的一种,如果我们将 2 个单链表看做 2 条线段的话,下图则模拟了 2 条线段相交的所有可能情况。 结合“单链表中每个节点有且仅有 1 个指针域”的特性,上图所示的这 3 种情况中,只有第 2 种情况符合单链表的特性,另外 2 种情况则破坏了此特性。因此要验证 2

Lianuuu的博客 3416

CS5523实战:如何用国产芯片完美替代LT8911设计MIPI转eDP电路(附原理图)

本文详细介绍了使用国产芯片CS5523完美替代LT8911进行MIPI转eDP电路设计的实战经验。文章从芯片选型、核心特性对比入手,深入剖析了电源时钟设计、MIPI/eDP接口的PCB布局与信号完整性要点,并提供了完整的原理图参考和调试排错指南,为硬件工程师实现国产化替代提供了清晰可行的方案。

yhn4567890的博客 1139

两个单链表的交集

条件:必须为两个有序单链表算法思想:首先创建一个头结点,什么都不存放。                再对两个单链表进行逐个比较,出口条件为指向两个单链表的指针都不为空。(1)如果相等,创建一个结点,将数值存入,两个单链表的指针都向后一个移动。(2)如果不相等,数值大的单链表的指针向后移动,直到相等为止。代码:           #include <stdio.h> #include...

Mr_cenGW的博客 5700

华为OD机试真题 新系统 2026-05-13 Python&JS语言 实现【查找能被整除的最大整数】

给定一个字符串和一个正整数,字符串由大小写字母和数字组成,要求从字符串中找出最大且能被给定正整数整除的数。

MISAYAONE的博客 224

手把手教你学SIMULINK模块库文件专栏--Scope 模块详解

模块是 Simulink 中的一个信号接收模块,用于实时显示信号波形。该模块可以捕捉并可视化仿真过程中信号的变化,帮助用户直观地分析系统的动态行为。模块都能提供强有力的支持。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常实用的工具,适用于需要实时显示信号波形的各种场景。模块的参数,可以进一步增强学习体验。模块参数的影响,下面我们将详细探讨每个参数如何影响波形显示。

MHD0815的博客 312

合并两个单链表

1.以下是基于带头结点的单链表的合并(并且两个链表都是有序的链表) p1 ,p2两个指针分别指向两个链表的第一个元素 申请head结点作为新链表的头结点,申请pre指针指向头结点 第一次: 对p1,p2指针指向位置的元素进行比对,将较小的元素挂在head结点之后,调整更小的元素的对应结点的指针,调整pre指针,以便之后将元素依次挂在后面。 之后重复此操作 第二次: 重复第一次的操作 ...

qq_51950769的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

编写一个成员函数,检查两个单链表的内容是否相同。

3.10 10编写一个成员函数,检查两个单链表的内容是否相同。 首先,两个单链表内容的相同应该是在两个单链表长度一致的情况下进行比较,如果长度不一致也满足不了,则必不相等。其次,只有当所有的内容一一相等时,两个单链表才相等,则剩余的所有情况均为不相等。 ...

qq_33551749的博客 1275

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

判断两个单链表是否相交及找到第一个交点

题目:给两个单链表,如何判断两个单链表是否相交?若相交,则找出第一个相交的节点。 这道题的思路和解法有很多,在这把这道题的解法做一个详细的总结。解这道题之前,我们需要首先明确一个概念: 如果两个单链表有共同的节点,那么从第一个共同节点开始,后面的节点都会重叠,直到链表结束。 因为两个链表中有一个共同节点,则这个节点里的指针域指向的下一个节点地址一样,所以下一个节点也会相交,依次类推。所以,若相

rotation博客 4万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言 两个递增单链表归并为一个递减单链表的实现与原理

文章目录C语言 两个递增单链表归并为一个递减单链表的实现与思路思路``如果对你有帮助,点个赞呗``实现代码结构体功能函数运行截图``欢迎大家在评论区赐教,谢谢`` C语言 两个递增单链表归并为一个递减单链表的实现与思路 思路 两个递增单链表L,P从头开始进行节点比较,较小的节点摘下来,放到Q链表里,Q链表用头插法建立单链表,已形成递减单链表如图 第一次1,2 进行比较,1比较小,进而把1节点摘...

qq_41740162的博客 2871

判断单链表中是否有环 | 判断两个单链表是否相交

目录 一.判断单链表是否存在环 1.判断一个单链表中是否存在环 2.寻找环的连接点 3.如何获取环的长度 4.如何将带环的单链表变为普通的单链表 二.判断两个无环单链表是否相交 1.方法一 利用两个相交链表尾节点相等的属性 2.方法二 利用栈 3.方法三 利用环 一.判断单链表是否存在环 首先我们来看一下,什么叫做单链表中存在环,即下图中所示的这种情况。 其中,我们将节点5称为连接点,即这个单链表中环开始的那个节点。 1.判断一个单链表中是否存在环 定义两个指针,即快指...

ThinPikachu的博客 986

将两个单链表合并成一个有序单链表

将两个单链表合并成一个有序单链表 思路:因为链表可以由结点轻松构造,所以首先需要创建单链表的元素,然后选择构造方式构造单链表,本代码为后插构造单链表。然后有了链表,怎么合并为一个有序单链表。大体可以先尝试排序构造的每个单链表,然后再在合并的时候进行有序比较排列即可。 #include<stdlib.h> #include<stdio.h> #include typedef ...

qq_33551749的博客 6098

Algorithm(判断两个单链表是否相交)

题目描述: 编写程序判断两个单链表是否相交? 分析:我们知道对于单链表只有一个后继结点,因此如果两个单链表相交,那么它们的尾节点地址必定相同,因此,我们只需要判断尾节点是否相同即可。 typedef struct node* Node; struct node { int...

夏洛克福尔摩斯 469

判断单链表中是否有环 | 两个单链表是否相交

判断单链表中是否有环 | 两个单链表是否相交 个人语录:时间不负有心人,星光不问赶路人,以顶级好的态度写一篇博客 前些天面试的时候,被三连问: 判断两个单链表是否相交 单链表相交如何找到交点 如何判断单链表是否有环 当时人就慌了,当然是滑铁卢了,qwq🤦‍♂️ 有了这个你还不会? 文章目录判断单链表中是否有环 | 两个单链表是否相交1. 判断单链表中是否有环1.1 容器判断1.2 快慢指针2. 寻找环的连接点3. 获取环的长度4. 将带环的单链表变为普通的单链表5. 判断两个无环单链表是否相交5.

乐褀的博客 1571
上一篇: 逆序输出单链表的值——深深地被递归折服
下一篇: 链表中有环——怎么判断
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值