当前位置: 首页 > news >正文

反转链表合并两个有序链表链表分割链表的回文结构相交链表

反转链表

来源:杭哥

206. 反转链表 - 力扣(LeetCode)

typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head)
{if (head==NULL){return NULL;}ListNode* prev=head;ListNode* cur=head->next;ListNode* fur=NULL;prev->next=NULL;while(cur!=NULL){fur=cur->next;cur->next=prev;prev=cur;cur=fur;}return prev;
}
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head)
{if (head==NULL){return NULL;}ListNode* prev=head;ListNode* cur=head->next;head->next=NULL;ListNode* phead=head;while(cur!=NULL){prev=cur;cur=cur->next;prev->next=phead;phead=prev;}return phead;
}
我想说:
  1. 我想说的是,像这种问题的话,就图多画一画就迎刃而解了。

  1. 反转链表的话,第一种思路就是利用三指针prev, cur, fur,然后这么倒来倒去就可以了。

  1. 第二种方式的话,可以新创建一个链表的头节点,然后把原先列表当中的每一个节点都头插到这个新链表中。


合并两个有序链表

来源:杭哥

21. 合并两个有序链表 - 力扣(LeetCode)

typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{if(list1==NULL){return list2;}if (list2==NULL){return list1;}ListNode* cur1=list1;ListNode* cur2=list2;ListNode* cur=NULL;ListNode* phead=NULL;int flag=0;while(cur1!=NULL && cur2!=NULL){if (cur1->val<cur2->val){if (flag==0){flag=1;phead=cur1;}else{cur->next=cur1;}cur=cur1;cur1=cur1->next;}else{if (flag==0){flag=1;phead=cur2;}else{cur->next=cur2;}cur=cur2;cur2=cur2->next;}}if (cur2!=NULL){cur->next=cur2;}if (cur1!=NULL){cur->next=cur1;}return phead;
}
#include <stdlib.h>
typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{ListNode* cur1=list1;ListNode* cur2=list2;ListNode* guard=(ListNode*)malloc(sizeof(ListNode));guard->next=NULL;ListNode* cur=guard;while(cur1!= NULL && cur2!= NULL){if (cur1->val < cur2->val){cur->next= cur1;cur=cur1;cur1=cur1->next;}else{cur->next= cur2;cur=cur2;cur2=cur2->next;}}if (cur1==NULL){cur->next=cur2;}if (cur2==NULL){cur->next=cur1; }return guard->next;
}
我想说:
  1. 带哨兵位的头结点的单链表的好处在于可以回避掉许多因为空指针而带来的麻烦。

  1. 两个链表的合并实际上就类似于归并的思想。


链表分割

来源:杭哥

链表分割_牛客题霸_牛客网 (nowcoder.com)

#include <stdlib.h>
class Partition {
public:ListNode* partition(ListNode* pHead, int x){ListNode* guard1 = (ListNode*)malloc(sizeof(ListNode));guard1->next=NULL;ListNode* cur1=guard1;ListNode* guard2 = (ListNode*)malloc(sizeof(ListNode));guard2->next=NULL;ListNode* cur2=guard2;ListNode* cur=pHead;while(cur!=NULL){if (cur->val< x){cur1->next=cur;cur1=cur;}else{cur2->next=cur;cur2=cur;}cur=cur->next;}cur1->next=guard2->next;cur2->next=NULL;return guard1->next;}
};
我想说:
  1. 如果想要回避掉空指针所带来的一系列麻烦,创建新的单链表的时候就选择带哨兵位头结点的单链表形式。


链表的回文结构

来源:杭哥

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

class PalindromeList {
public:bool chkPalindrome(ListNode* A){int count=1;ListNode* slow=A;ListNode* fast=A;while(fast!=NULL && fast->next!=NULL){slow=slow->next;count++;fast=fast->next->next;}ListNode* prev=slow;ListNode* cur=prev->next;ListNode* fur=NULL;ListNode* head=NULL;prev->next==NULL;while(cur!=NULL){fur=cur->next;cur->next=prev;count++;prev=cur;cur=fur;}head=prev;int num=count/2;while(num--){if (A->val != head->val){return false;}A=A->next;head=head->next;}return true;}
};
我想说:
  1. 通过快慢指针(双指针)可以找到链表的中间节点。

  1. 对中间节点及其后面的链表部分反转,然后与前面那一段进行节点数值一一比较。


相交链表

来源:杭哥

160. 相交链表 - 力扣(LeetCode)

typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{int len1=1;int len2=1;ListNode* cura=headA;ListNode* curb=headB;while(cura->next!=NULL){len1++;cura=cura->next;}while(curb->next!=NULL){len2++;curb=curb->next;}if (cura!=curb){return NULL;}int gap=abs(len1-len2);ListNode* longlist=headA;ListNode* shortlist=headB;if (len1<len2){longlist=headB;shortlist=headA;}while(gap--){longlist=longlist->next;}while(longlist!=shortlist){longlist=longlist->next;shortlist=shortlist->next;}return longlist;
}
我想说:
  1. 链表相交的话,不是成十字形状的,而是类似于剪刀这种形状,因为一个节点的next指针不可能指向两个位置。

  1. 如果说两个链表的尾节点地址是相同的,那么这两个链表一定是相交的。

相关文章:

反转链表合并两个有序链表链表分割链表的回文结构相交链表

反转链表来源&#xff1a;杭哥206. 反转链表 - 力扣&#xff08;LeetCode&#xff09;typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListNode* head) {if (headNULL){return NULL;}ListNode* prevhead;ListNode* curhead->next;ListNode* furNUL…...

联想触摸板只能单击,二指三指失效

问题背景 这问题是我笔记本两三年前重装win10系统后出现的&#xff0c;当时有鼠标懒得弄。今天发现没鼠标后&#xff0c;触摸板连二指滑动都没有太麻烦了&#xff0c;所以决定弄一下。 联想笔记本&#xff0c;win10系统重装后出现的问题。 1.鲁大师&#xff0c;联想电脑管家 …...

mysql 删除表卡死,或是截断(truncate)卡死解决办法

利用工具进行truncate表的时候&#xff0c;一直运行&#xff0c;运行了十几分钟也没有成功。中止之后再运行也是一样。但是删除表的数据以及查询表数据都是可以的。猜测是锁死了。 使用 show processlist; 发现Waiting for table metadata lock 问题&#xff1b; mysql> s…...

ORACLE P6 EPPM 架构及套件介绍(源自Oracle Help)

引言 借助官方帮助的内容&#xff0c; 我水一篇文章&#xff0c;翻译了下文 P6EPPM架构 P6各套件 P6&#xff1a;大多数用户几乎完全依赖在标准网络浏览器中运行的 P6 网络应用程序。简称为 P6&#xff0c;它是管理项目的主要界面。P6 移动版&#xff1a;允许团队成员提供任…...

Android开发面试:数据结构与算法知识答案精解

目录 数据结构与算法 线性表 数组 链表 栈 队列 树 二叉树 红黑树 哈夫曼树 排序算法 冒泡排序 选择排序 插入排序 希尔排序 堆排序 快速排序 归并排序 查找算法 线性查找 二分查找 插值查找 斐波拉契查找 树表查找 分块查找 哈希查找 动态规划算法…...

京东前端手写面试题集锦

实现call方法 call做了什么: 将函数设为对象的属性执行和删除这个函数指定this到函数并传入给定参数执行函数如果不传入参数&#xff0c;默认指向为 window // 模拟 call bar.mycall(null); //实现一个call方法&#xff1a; // 原理&#xff1a;利用 context.xxx self obj.…...

【JDK动态代理】及【CGLib动态代理】:Java的两种动态代理方式

Java的两种动态代理方式动态代理是什么&#xff1f;JDK动态代理CGLib动态代理CGLib 底层原理CGLib 实现步骤两者区别Spring AOP原理--动态代理动态代理是什么&#xff1f; 动态代理就是&#xff0c;在程序运行期&#xff0c;创建目标对象的代理对象&#xff0c;并对目标对象中的…...

《程序员面试金典(第6版)》面试题 04.05. 合法二叉搜索树

题目描述 实现一个函数&#xff0c;检查一棵二叉树是否为二叉搜索树。 示例 1: 输入: 2/ \1 3输出: true 示例 2: 输入: 5/ \1 4/ \3 6输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 &#xff0c;但是其右子节点值为 4 。 解题思路与代码 使用…...

Nginx 反向代理技术梳理

Nginx 反向代理技术梳理 使用反向代理脑图 域名 A 可以解析找到 CDN 缓存 用户点击 APP 即通过 URL 发送 HTTPS 请求域名会进入阿里云的 DNS 服务器&#xff0c;解析域名会做第一级负载均衡通过 CDN 解析出域名&#xff0c;通过阿里云配置转发到 CDN 缓存服务器 CDN 有数据则直…...

华为OD机试 - 整数编码(Java) | 机试题+算法思路+考点+代码解析 【2023】

整数编码 题目 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 1、编码时7位一组,每个字节的低7位用于存储待编码数字的补码。 2、字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节,置0表示当前字节为最后一个字…...

蓝桥杯冲击01 - 质数篇

目录 前言 一、质数是什么 二、易错点 三、试除法判断是否为质数 四、质数常考三大模型 五、真题练手 前言 距离蓝桥杯还有一个月&#xff0c;高效复习蓝桥杯知识&#xff0c; 质数相关的题目在蓝桥杯中经常出现。例如&#xff0c;2016年蓝桥杯省赛初赛第四题就是要求判…...

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(下)

前言 本文是HTML零基础小白学习系列的第三篇文章&#xff0c;点此阅读 上一篇文章 文章目录前言十五.HTML布局1.使用div元素添加网页布局2.使用table元素添加网页布局十六.HTML表单和输入1.文本域2.密码字段3.单选按钮4.复选框5.提交按钮十七.HTML框架1.iframe语法2.iframe设置…...

MySQL索引分类

1 MySQL索引都有哪些分类按数据结构分类可分为&#xff1a;Btree索引、Hash索引、Full-text索引;按物理存储分类可分为&#xff1a;聚簇索引、二级索引&#xff08;辅助索引&#xff09;;按字段特性分类可分为&#xff1a;主键索引、普通索引、前缀索引;按字段个数分类可分为&a…...

会声会影2023最新版图文安装详细教程

会声会影2023操作简单&#xff0c;使用便捷&#xff0c;创意十足&#xff0c;新增的分屏功能&#xff0c;轨道透明度&#xff0c;镜头平移等功能&#xff0c;让用户的剪辑过程更加流畅&#xff0c;轻松就能制作出令人惊艳的视频作品。它不仅符合家庭或个人所需的影片剪辑功能&a…...

Java中的反射

类加载器&#xff08;1&#xff09;类的加载当我们的程序在运行后&#xff0c;第一次使用某个类的时候&#xff0c;会将此类的class文件读取到内存&#xff0c;并将此类的所有信息存储到一个Class对象中。说明&#xff1a;a.图中的Class对象是指&#xff1a;java.lang.Class类的…...

STM32入门笔记(03):STM32F103C8T6定时器的输入捕获模式和编码器模式(SPL库函数版)

目录1.定时器的输入捕获模式定时器输入捕获实验代码实现程序说明实现思路实现效果知识要点2.定时器的编码器模式定时器编码器实验代码实现实验思路知识要点参考资料先导知识 [1] STM32入门笔记(02)&#xff1a;定时器之定时器中断、输入捕获和PWM输出&#xff08;SPL库函数版)…...

《网络安全》零基础教程-适合小白科普

《网络安全》零基础教程 目录 目录 《网络安全》零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻击类型 病毒、蠕虫、木马、后门 DoS、DDoS攻击 ​​​​​​​SQL注入、XSS攻击 ​​​…...

微信小程序语言与web开发语言的区别

WXML与HTML的区别def&#xff1a;WXML是小程序框架设计的一套标签语言&#xff0c;用来构建小程序页面的结构&#xff0c;作用类似于web开发中的HTML区别&#xff1a;标签名称的不同如HTML中的div&#xff0c;span&#xff0c;img&#xff0c;a分别对应wxml中的view&#xff0c…...

【2022-09-14】米哈游秋招笔试三道编程题

第一题&#xff1a;最短子串 题目描述 米小游拿到了一个字符串&#xff0c;她想截取一个连续子串&#xff0c;使得该子串中包含至少k个连续的“mihoyo”。 你可以帮米小游求出最短的子串长度&#xff0c;以及对应的子串位置吗&#xff1f; 输入描述 第一行输入两个正整数n…...

云监控能力介绍

传统监控介绍 监控系统必要性 监控系统的能力清单 市面上常见商业及开源监控工具集 传统监控体系的不足 云监控介绍 云监控&#xff08;CloudMonitor&#xff09;是一项针对云资源和互联网应用进行监控的服务。 云监控为云上用户提供开箱即用的企业级开放型一站式监控解决方…...

千问 LeetCode 2281.巫师的总力量和 Python3实现

LeetCode 2281. 巫师的总力量和&#xff08;Sum of Total Strength of Wizards&#xff09; 是一道难度较高的题目&#xff0c;核心在于 贡献法 单调栈 前缀和的前缀和&#xff08;prefix sum of prefix sums&#xff09;。下面给出 清晰、高效、符合 Python3 习惯 的实现&am…...

AI编程助手集成DRPC技能包:无缝查询区块链数据的实践指南

1. 项目概述&#xff1a;为AI编程助手解锁区块链数据能力 如果你正在使用Claude Code、Cursor这类AI编程助手&#xff0c;并且需要频繁查询区块链上的数据——比如检查钱包余额、追踪交易状态、读取智能合约信息&#xff0c;那么你很可能已经厌倦了在代码编辑器和区块链浏览器之…...

InputTip:提升表单体验的动态输入引导组件设计与实战

1. 项目概述&#xff1a;一个被低估的输入增强工具 在桌面应用开发中&#xff0c;我们常常会花费大量精力去构建复杂的业务逻辑和炫酷的界面&#xff0c;却容易忽略一个直接影响用户体验的细节&#xff1a; 输入引导 。回想一下&#xff0c;你是否遇到过这样的场景&#xff1…...

Docker 部署 XiuXianGame 文字修仙游戏:极空间 NAS 上随时挂机刷资源

前言 挂机刷资源&#xff0c;躺平修成仙。 这类文字修仙游戏&#xff0c;说白了就是佛系养成为主&#xff0c;不用时刻盯着&#xff0c;挂着就行。但问题是——大多数要么得在本地电脑跑&#xff0c;要么依赖第三方平台&#xff0c;体验受限。把这套东西跑在自己的 NAS 上&am…...

学术生产力革命已来,NotebookLM Agent如何把文献综述时间压缩83%?实测数据首次公开!

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM Agent研究辅助 NotebookLM 是 Google 推出的基于用户上传文档进行深度理解与推理的 AI 助手&#xff0c;其内置的 Agent 能力可显著提升学术研究、技术调研与知识整合效率。当启用 Agent 模…...

如何在3分钟内完成Windows与Office智能激活:KMS_VL_ALL_AIO完全指南

如何在3分钟内完成Windows与Office智能激活&#xff1a;KMS_VL_ALL_AIO完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows操作系统和Office办公软件的正版激活而烦恼吗&…...

大模型压缩实战:量化、剪枝与蒸馏技术解析与AngelSlim应用

1. 项目概述&#xff1a;从“大”到“小”的模型压缩革命最近在模型部署和推理优化的圈子里&#xff0c;Tencent/AngelSlim 这个项目被讨论得挺多。简单来说&#xff0c;它不是一个全新的模型&#xff0c;而是一套由腾讯开源的、专门用于大语言模型&#xff08;LLM&#xff09;…...

YOLO26改进| downsample |网络深层多分支互补鲁棒下采样模块

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文给大家带来的教程是将YOLO26的下采样替换为DRFD来提取特征。文章在介绍主要的原理后&#xff0c;将手把手教学如何进行模块的代码添加和修…...

分布式架构实战:全平台矩阵管理系统的技术实现与性能优化

前言在数字化运营进入全域竞争的今天&#xff0c;多平台账号集群管理已成为企业与开发者的核心技术挑战。传统单体架构的矩阵工具普遍存在算力弹性不足、账号关联风险高、跨平台适配复杂、AI 能力割裂等问题&#xff0c;导致 90% 以上的自研矩阵系统最终以失败告终。本文基于生…...

别再只点CubeMX的SDRAM选项了!STM32F429IGT6外扩W9825G6KH内存的完整驱动与读写测试指南

STM32F429IGT6外扩W9825G6KH内存实战&#xff1a;从CubeMX配置到完整驱动开发的深度解析 如果你正在使用STM32F429IGT6开发板&#xff0c;并且需要扩展大容量内存&#xff0c;W9825G6KH-6I这颗32MB的SDRAM芯片可能已经在你的硬件清单上。许多开发者习惯性地依赖STM32CubeMX生成…...