2025年8月8日
小结:省流,写了俩道巨简单的(被卡好久的传参指针和指针的引用的区别),一题递归(意满);这笔记还是0809写的,啧,今天可能不写了,明天也可能不写

目录

    • LeetCode
      • 21. 合并两个有序链表
      • 2. 两数相加
      • 19. 删除链表的倒数第N个结点

LeetCode

21. 合并两个有序链表

21. 合并两个有序链表
就是一个玩指针的小小题目,啧,指针都改不明白

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode *tmp1 = list1, *tmp2 = list2, *tmp, *pre1 = nullptr;if (tmp1 == nullptr) return tmp2;else if (tmp2 == nullptr) return tmp1;// 我要返回list1,链头单列考虑if (tmp1->val >= tmp2->val) {ListNode* next2 = tmp2->next;tmp2->next = list1;list1 = tmp2;tmp2 = next2;pre1 = list1;}while (tmp1 != nullptr && tmp2 != nullptr){if (tmp1->val >= tmp2->val) {// 把2接到1当前的前面去pre1->next = tmp2;pre1 = tmp2;tmp = tmp2->next;pre1->next = tmp1;tmp2 = tmp;} else {pre1 = tmp1;tmp1 = tmp1->next;}}if (tmp1 == nullptr) {pre1->next = tmp2;} return list1;}
};

2. 两数相加

2. 两数相加

题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。在这里插入图片描述

俺不中了,俺没看到逆序,还大张旗鼓反转链表,还没用那个常用的交换反转法(下附 reverse),用头插法,然后就错了(后附传指针和指针引用的区别)

ListNode* reverse(ListNode* head) {ListNode* prev = nullptr;ListNode* curr = head;while (curr != nullptr) {ListNode* nextTmp = curr->next;curr->next = prev;prev = curr;curr = nextTmp;}return prev;
}

传指针和指针的引用,区别辨析
一个插了 1 2 3 4 5 的链表,现在试图在最开头插入 6

  1. 传指针,无引用
void insert(ListNode* head, ListNode* tmp) {tmp->next = head;head = tmp;
}ListNode* tmp = new ListNode(6);
insert(head, tmp);
打印head及后续:1 2 3 4 5

可见,未更新 主函数 head

  1. 传指针的引用
void insert(ListNode* &head, ListNode* tmp) {tmp->next = head;head = tmp;
}ListNode* tmp = new ListNode(6);
insert(head, tmp);
打印head及后续:6 1 2 3 4 5
  1. 继续看这个试图头插法的反转为啥不对
void insert(ListNode* &head, ListNode* tmp) {tmp->next = head;head = tmp;
}int main() {// 创建以head开头的 5 个节点的 链表// init...ListNode *hp = head, *next = hp->next;while(next != nullptr) {insert(hp, next);next = next->next;}

分析,insert 中 next 没有更新,但是 insert 里把 next 的 next = head 了(初始就是1)
那我本来是想在 1 前面插 2,现在好了,insert 完 头变成 2 了,next(第一次是2) = next->next(1) 一下
那不是又去1插2前面,妥妥死循环了

  1. 唉😔你真想改,就这样,提前存了 tmp = next->next;
ListNode *hp = head, *next = hp->next, *origin_head = head;
while(next != nullptr) {tmp = next->next;insert(head, next);next = tmp;
}
origin_head->next = nullptr; //因为1没斩断指向2的

把题目读懂后的代码(蠢货,它不用反转,啧啧啧)

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {// 我要返回 l1int carry = 0, value;ListNode *p1 = l1, *p2 = l2, *pre;while(p1 != nullptr && p2 != nullptr) {value = p1->val + p2->val + carry;carry = value / 10;p1->val = value % 10;pre = p1;p1 = p1->next, p2 = p2->next;// cout << "value= " << value << endl;}ListNode *p;if (p1 != nullptr) {p = p1;} else {p = p2;}pre->next = p;while(p != nullptr) {value = p->val + carry;// cout << "value= " << value << endl;carry = value / 10;p->val = value % 10;pre = p;p = p->next;if (carry == 0) break;}// cout << pre->val << endl;if (carry != 0) {pre->next = new ListNode();pre->next->val = carry;}return l1;}
};

19. 删除链表的倒数第N个结点

19. 删除链表的倒数第N个结点

题目
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
在这里插入图片描述

聪明蛋,一下子就想到递归,回头的时候把目标删了,调了一会儿,写的略丑

class Solution {
public:int find(ListNode* &now, ListNode* pre, int cnt) {if (now == nullptr) {// 说明是倒数第一个return 1;}int now_cnt = find(now->next, now, cnt) + 1;if (cnt == now_cnt - 1) {// 当前这个不要if (pre != nullptr) pre->next = now->next;else now = now->next;}return now_cnt;}ListNode* removeNthFromEnd(ListNode* head, int n) {int val = find(head, nullptr, n);// cout << "val= " << val << endl;if(val == 2) return nullptr;else return head;}
};

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

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

相关文章

java9学习笔记-part2

进程 API在 Java 9 之前&#xff0c;Process API 仍然缺乏对使用本地进程的基本支持&#xff0c;例如获取进程的 PID 和所有者&#xff0c;进程的开始时间&#xff0c;进程使用了多少 CPU 时间&#xff0c;多少本地进程正在运行等。Java 9 向 Process API 添加了一个名为 Proce…

AI智能编程工具汇总

AI智能编程工具汇总 以下是一份关于主流大模型开发工具的综合介绍&#xff0c;涵盖 Gemini CLI、Qwen-Code、Kimi K2 等关键工具的功能特性、安装方式与使用建议。 &#x1f31f; Gemini CLI 开发者&#xff1a;Google DeepMind 简介&#xff1a;命令行工具&#xff0c;用于调…

算法_python_牛客华为机试笔记_01

刷题是必须的&#xff0c;通过刷题以及别人对题目的解析&#xff0c;可以快速理解&#xff0c;提高效率。 00_题库与参考视频 华为机试_在线编程_牛客网 HJ3 明明的随机数_哔哩哔哩_bilibili 这套华为机试是华为笔试面试机考在线练习&#xff0c;共138道题&#xff0c;目前…

Java基础-完成局域网内沟通软件的开发

目录 案例要求&#xff1a; 实现思路&#xff1a; itheima-chat-server包 src com.itheima Constant类&#xff1a; Server类: ServerReaderThread类: itheima-chat-system包 src com.itheima.ui ChatEntryFrame类&#xff1a; ClientChatFrame类: ClientReaderTh…

windows内核研究(内存管理-线性地址的管理)

内存管理线性地址的管理 进程空间的地址划分分区x86 32位Windows空指针赋值区0x00000000 - 0x0000FFFF用户模式区0x00010000 - 0x7FFEFFFF64KB禁入区0x7FFF0000 - 0x7FFFFFFF内核0x80000000 - 0xFFFFFFFF线性地址有4GB&#xff0c;但是并不是所有的地方都能访问&#xff08;这里…

【问题解决】使用patch-package修改node-models中的源码

文章目录一、应用场景二、patch-package 和 postinstallpatch-packagepostinstall三、操作步骤1、使用yarn安装patch-package和postinstall-postinstall2、修改package.json3、修改node-model中源码、保存。4、找到修改文件对应的包名5、使用git将新增的patches文件同步到仓库6…

当配置项只支持传入数字,即无法指定单位为rem,需要rem转px

您好&#xff01;针对您 Vue 3 Element Plus 的技术栈&#xff0c;要优雅且符合大厂规范地解决这个问题&#xff0c;最佳实践是创建一个响应式的 Composition API (组合式函数)。 这个方法完全遵循 Vue 3 的设计哲学&#xff0c;具有高内聚、低耦合、可复用、类型安全&#xf…

谷歌搜索 sg_ss 逆向分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;部分python代码sg_ss cp.call(get_sg_…

一个“加锁无效“的诡异现象

加锁了还出问题&#xff1f;从"点击过快"到"状态可控"&#xff1a;多线程共享变量的并发陷阱与实战对策详情如下&#xff1a;在服务端开发中&#xff0c;多线程并发处理客户端请求是提升系统吞吐量的常见手段。最近有位开发者朋友遇到了一个令人费解的问题…

液体泄漏识别误报率↓76%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;禁止未经授权的转载与篡改。一、行业痛点&#xff1a;液体泄漏识别的现实挑战在化工生产、食品加工、仓储物流等场景中&#xff0c;液体泄漏的实时监测是保障安全生产的关键…

Y9000P跑开源模型(未完成)

环境信息 1、Y9000笔记本 2、1T空白硬盘 3、ubunut24.04桌面版 一、环境初始化 第一部分&#xff1a;系统初始化 1、安装基础软件 apt-get update apt-get -y install openssh-server openssh-client apt-utils freeipmi ipmitool sshpass ethtool zip unzip nano less git ne…

ARM体系结构

ARM体系结构 编程原理 从源代码到CPU执行过程 #mermaid-svg-M4xemCxDjIQVNNnW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:14px;fill:#333;}#mermaid-svg-M4xemCxDjIQVNNnW .error-icon{fill:hsl(220.5882352941, 100%, 98.3333333333%);}#mer…

基于SpringBoot的高校社团管理系统的设计与实现(代码+LW文档+远程运行)

&#x1f4af;博主&#xff1a;✌全网拥有50W粉丝、博客专家、全栈领域优质创作者、平台优质Java创作者、专注于Java技术领域和毕业项目实战✌&#x1f4af; &#x1f497;开发技术&#xff1a;SpringBoot、Vue、SSM、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、…

F5发布业界首创集成式应用交付与安全平台,开启ADC 3.0新时代

在数字化转型加速与AI技术蓬勃发展的今天&#xff0c;企业对应用性能与安全的需求正经历革命性变革。传统应用架构已难以满足现代混合多云环境与AI驱动型业务场景的严苛要求。全球领先的应用安全和交付服务提供商F5&#xff08;NASDAQ: FFIV&#xff09;&#xff0c;持续推动 F…

SELinux 入门指南

SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块&#xff0c;它提供了一种强制访问控制&#xff08;Mandatory Access Control, MAC&#xff09;机制。与传统的 Linux 自主访问控制&#xff08;Discretionary Access Control, DAC&#xff09;不同&#xff0c;SE…

ARMv8 MMU页表格式及地址转换过程分析

1.简介 CPU发出的虚拟地址经过MMU转换后得到物理地址&#xff0c;然后使用物理地址访问真实的硬件。虚拟地址和物理地址的映射关系保存在页表中&#xff0c;MMU需要遍历页表&#xff0c;才能将虚拟地址转换成物理地址。ARM64现在有两种大小的页表描述符&#xff0c;分别是ARMv8…

数据结构---二叉树(概念、特点、分类、特性、读取顺序、例题)、gdb调试指令、时间复杂度(概念、大O符号法、分类)

一、二叉树1、树1&#xff09;概念 树是 n(n > 0) 个结点的有限集合。若 n0 &#xff0c;为空树。在任意一个非空树中&#xff1a;&#xff08;1&#xff09;有且仅有一个特定的根结点&#xff1b;&#xff08;2&#xff09;当 n>1 时&#xff0c;其余结点可分为 …

安全基础DAY1-安全概述

信息安全现状及挑战常见术语信息安全的脆弱性及常见攻击网络环境的开放性其实就是人人可以上网&#xff0c;网上零成本。协议栈自身的脆弱性及常见攻击协议栈自身的脆弱性常见安全风险网络的基本攻击模式物理层--物理攻击前置知识 1.打开Apache服务 cd /etc/init.d ./apache2 s…

Claude Code 的核心能力与架构解析

技术分析介绍&#xff1a;Claude Code 的核心能力与架构解析一、概述 Claude Code 是由 Anthropic 推出的面向开发者的智能编码助手&#xff0c;它不仅仅是一个代码生成工具&#xff0c;更是一个具备记忆、工具调用、自主规划和环境感知能力的“智能代理”&#xff08;Agentic …

Mac 电脑放在环境变量中的通用脚本

mac电脑下放在环境变量中&#xff0c;方便提高效率执行 注&#xff1a;相关路径需要根据实际情况进行更新 需要在 .bash_profile 文件中定义如下&#xff08;路径需要做实际替换&#xff09;&#xff1a; source $HOME/software/scripts/base_profile.sh source $HOME/software…