【题解】两个链表的第一个公共结点、链表相加(二)

文章目录

  • 两个链表的第一个公共结点
  • 链表相加(二)

两个链表的第一个公共结点

题目链接:两个链表的第一个公共结点

解题思路1:利用路程相同

两个指针从两个链表的头结点出发,以相同的速度开始往前走,走完一条继续走另一条,最后一定会相遇,如果有相同节点,那相遇的节点就是第一个公共节点,如果没有相同节点,那相遇的节点就是nullptr,两个指针此时分别指向两条链表的nullptr

代码如下:

    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {ListNode* p1 = pHead1;ListNode* p2 = pHead2;while(p1 != p2){p1 = (p1==nullptr) ? pHead2 : p1->next;p2 = (p2==nullptr) ? pHead1 : p2->next;}return p1;}

解题思路2:哈希

将第一个链表的所有节点放到集合中,再遍历第二个链表,查找集合中是否有第二个链表的元素,如果有,则该元素就是两个链表的第一个公共节点

代码如下:

    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {set<ListNode*> st;ListNode* p1 = pHead1;ListNode* p2 = pHead2;while(p1 != nullptr){st.insert(p1);p1 = p1->next;}while(p2 != nullptr){if(st.count(p2)){return p2;}p2 = p2->next;}return nullptr;}

解题思路3:从长度入手

首先统计两条链表的长度
接着让较长的链表先走,最后达到两条链表走到最后一样长停下
此时接着以相同的速度往后走,最后两个指针一定会相遇,如果有公共节点,相遇的节点就是公共节点,如果没有公共节点,最后两个节点也会指向相同的nullptr.

代码如下:

	int LengthLink(ListNode* head){int length = 0;while (head != nullptr) {length++;head = head->next;}return length;}ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {int len1 = LengthLink(pHead1);int len2 = LengthLink(pHead2);while(len1 != len2){if(len1 > len2){pHead1 = pHead1->next;len1--;}else{pHead2 = pHead2->next;len2--;}}while(pHead1 != pHead2){pHead1 = pHead1->next;pHead2 = pHead2->next;}return pHead1;}

链表相加(二)

题目链接:链表相加(二)

解题思路1:反转链表再相加

代码如下:

    ListNode* Reverse(ListNode* head){ListNode* res = nullptr;ListNode* pre = res;ListNode* cur = head;while(cur != nullptr){ListNode* pnext = cur->next;if(pnext == nullptr) {res = cur;}cur->next = pre;pre = cur;cur = pnext;}return res;}ListNode* addInList(ListNode* head1, ListNode* head2) {if(head1 == nullptr) return head2;if(head2 == nullptr) return head1;//反转两个链表ListNode* h1 = Reverse(head1);ListNode* h2 = Reverse(head2);//添加表头ListNode* res = new ListNode(-1);ListNode* head = res;int carry = 0;//记录进位while(h1!=nullptr || h2!=nullptr || carry!=0){int v1 = h1==nullptr ? 0 : h1->val;int v2 = h2==nullptr ? 0 : h2->val;int temp = v1 + v2 + carry;carry = temp / 10;//进位可能是1、0temp %= 10;head->next = new ListNode(temp);head = head->next;if(h1 != nullptr) h1 = h1->next;if(h2 != nullptr) h2 = h2->next;}return Reverse(res->next);}

解题思路2:利用栈

利用栈先进后出的特性来模拟链表的反转,最后每一个得到的值进行头插法得到最终的链表

代码如下:

    ListNode* addInList(ListNode* head1, ListNode* head2) {if (head1 == nullptr) return head2;if (head2 == nullptr) return head1;stack<ListNode*> s1;stack<ListNode*> s2;ListNode* p1 = head1;ListNode* p2 = head2;while (p1 != nullptr) {s1.push(p1);p1 = p1->next;}while (p2 != nullptr) {s2.push(p2);p2 = p2->next;}int carry = 0;//进位ListNode* res = nullptr;while (!s1.empty() || !s2.empty()) {int val = carry;if (!s1.empty()) {val += s1.top()->val;s1.pop();}if (!s2.empty()) {val += s2.top()->val;s2.pop();}carry = val / 10;ListNode* cur = new ListNode(val % 10);cur->next = res;res = cur;}if(carry > 0){ListNode* node = new ListNode(carry);node->next = res;res = node;}return res;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类和对象(上)

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将意见事情拆分为不同的对象&#xff0c;靠对象之间的交互完成。 …

慕课网Go-4.package、单元测试、并发编程

package 1_1_User.go package usertype User struct {Name string }1_1_UserGet.go package userfunc GetCourse(c User) string {return c.Name }1_1_UserMain.go package mainimport ("fmt"Userch03 "goproj/IMOOC/ch03/user"//别名&#xff0c;防止同名…

uniapp跨域解决

uniapp跨域解决 跨域是什么 跨域指的是浏览器不能执行其他网站的脚本&#xff0c;当一个网页去请求另一个域名的资源时&#xff0c;域名、端口、协议任一不同&#xff0c;就会存在跨域。跨域是由浏览器的同源策略造成的&#xff0c;是浏览器对JavaScript施加的安全限制。 报错…

【python脚本】python实现xml文件的图片标签可视化

【python脚本】python实现xml文件的图片标签可视化 批量实现文件夹下xml文件可视化展现结果。 import xml.dom.minidom import cv2 import os import xml.etree.ElementTree as ET""" 该脚本用于目标框可视化 IMAGE_INPUT_PATH&#xff1a;输入图片路径 XML_I…

Wi-Fi 6技术详解

1. 介绍 Wi-Fi 6&#xff0c;也称为802.11ax&#xff0c;是Wi-Fi技术的最新标准。它是对之前标准Wi-Fi 5&#xff08;802.11ac&#xff09;的升级和改进&#xff0c;旨在提供更高的速度、更大的容量、更好的性能和更高的可靠性。Wi-Fi 6技术的引入为无线网络带来了革命性的变化…

机柜PDU的选购也有大学问——与机柜PDU相关的那些事儿

在各行各业数据中心机房供配电建设过程中&#xff0c;机柜专用PDU电源插座看似是一个较为简单的用电设备&#xff0c;事实上又不那么简单。机柜PDU&#xff0c;是为安装在机柜内部的IT设备提供电源分配、管理的末端配电设备&#xff0c;在不同的工作场合对于PDU的规格要求也是不…

解决H5在iOS中视频播放自动全屏问题

在iOS端的Web控件上使用video标签播放视频时&#xff0c;视频会自动全屏播放。 解决方案 ios端video标签必须加webkit-playsinline、playsinline属性。 android端部分视频也会存在自动全屏问题&#xff0c;添加webkit-playsinline属性。 在HTML修改video标签 <video sr…

寻找峰值——力扣162

文章目录 题目描述法一 寻找最大值法二 二分法 题目描述 法一 寻找最大值 int findPeakElement(vector<int>& nums){return max_element(nums.begin(), nums.end()) - nums.begin();}法二 二分法 int findPeakElement(vector<int>& nums) {int l 0, r n…

目标检测中 anchor base和anchor free

目标检测中两种不同anchor的生成 趋势&#xff1a;anchor free越来越受到实时性检测的青睐&#xff0c;&#xff0c;&#xff0c;

二分图匹配算法

二分图匹配算法是一种用于解决二分图最大匹配问题的算法。 二分图&#xff1a; 在圖論中&#xff0c;二部圖&#xff08;bipartite graph&#xff09;是一類特殊的圖&#xff0c;又稱為、偶图、雙分圖。二分圖的頂點可以分成兩個互斥的独立集 U 和 V 的圖&#xff0c;使得所有…

机器人科普--AGILOX 叉车

机器人科普--AGILOX 叉车 1 概述2 导航3 驱动轮组4 叉举参考 1 概述 AGILOX 叉车&#xff0c;不需要画地图路径&#xff0c;很厉害。 2 导航 中间路径自由导航&#xff0c;末端规划出轨迹路线&#xff0c;并使用优良的控制器做轨迹追踪。 AGILOX &#xff5c; 10 Min setu…

ubuntn 18.04安装SourceInsight3.5(已验证)

Source Insight作为一款看代码神器在大型c、c项目中必不可少&#xff0c;但是Source Insight软件并不支持Linux操作系统&#xff0c;只支持Windows操作系统。 想要在linux系统上安装window软件就需要借助wine&#xff0c;wine 是一个能够在多种 POSIX-compliant 操作系…

Spring依赖注入

文章目录 前言1.依赖注入简介2. setter注入3. 构造器注入4. 自动装配 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。当然&#xff0c;如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚&#xff0…

商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c bbc

&#xfeff; 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、R…

TCP拥塞控制详解 | 1. 概述

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …

vue3搭建Arco design UI框架

技术&#xff1a;Vue3.2.40 UI框架&#xff1a;Arco design 2.44.7 需要安装:yarn 1.22.19 和npm 8.19.4 1.第一步安装本地全局arco脚手架 管理员运行CMD npm i -g arco-cli安装成功后如下&#xff1a; 2.第二步在需要存放项目的文件夹拉取项目 我这里把项目存放在 D:\W…

BCD编码方案

1.BCD码的原理 BCD码&#xff08;Binary-Coded Decimal&#xff09;是一种用二进制数来编码十进制数字的方式。BCD码使用4位二进制数来表示一个十进制数的每一位。 2.8421码映射 8421码是BCD码的一种实例化。 01234567890000000100100011010001010110011110001001 因此132…

计算机网络基础(静态路由,动态路由,公网IP,私网IP,NAT技术)

文章目录 一&#xff1a;静态路由和动态路由二&#xff1a;静态路由的配置路由信息的方式演示三&#xff1a;默认路由四&#xff1a;公网IP和私网IP和NAT技术的基本理解 一&#xff1a;静态路由和动态路由 在说静态路由和动态路由前&#xff0c;我们需要来了解一下&#xff0…

【Windows】磁盘快捷修复

【Windows】磁盘快捷修复 1、背景2、关于Chkdsk3、示例 1、背景 前段时间使用U盘拷贝文件过程中&#xff0c;突然发现U盘无法读取了&#xff0c;U盘里面存储的数据也无法获取。 然后使用windows系统的chkdsk命令进行修复。 chkdsk全称&#xff1a;checkdisk&#xff0c;即磁盘…

【 Redis】的乱码问题

问题描述&#xff1a; 使用RedisTemplate存储的数据&#xff0c;在 redis-cli 客户端查看时&#xff0c;key 和 value 都会携带类似\xac\xad\这样的字符串。 原因&#xff1a; 由于默认使用了 jdk 的序列化方式。以下是支持的序列化方式 项目一般都会有缓存&#xff0c;常常…