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

20天速通LeetCodeday09:关于链表

前言

今日练习目的:掌握如何遍历链表,以及改变节点的next指向。

206:反转链表

题目要求:给定一个单链表的头节点head
要求:反转链表,并返回反转后的链表

核心思路

使用三个指针:

prev:当前节点的前一个节点
cur :当前正在处理的节点
next:临时保存 cur 的下一个节点

代码实现

classSolution{publicListNodereverseList(ListNodehead){ListNodeprev=null;ListNodecur=head;while(cur!=null){ListNodenext=cur.next;// 保存下一个节点cur.next=prev;// 反转指针prev=cur;// prev 前进cur=next;// cur 前进}returnprev;}}

总结

掌握链表的语法:listNode prev=null

203:移除链表元素

题目要求:给定一个链表头节点head和一个值val。
要求:删除链表中所有等于val的节点,并返回head

核心思路

引入虚拟头节点dummy,防止第一个元素就是需要被删除元素

遍历的逻辑:

如果 cur.next.val == val:
删除 cur.next
否则:
cur 向后移动

代码实现

classSolution{publicListNoderemoveElements(ListNodehead,intval){// 虚拟头节点ListNodedummy=newListNode(0);dummy.next=head;ListNodecur=dummy;while(cur.next!=null){if(cur.next.val==val){cur.next=cur.next.next;// 删除节点}else{cur=cur.next;// 移动指针}}returndummy.next;}}

总结

掌握虚拟头节点的创建:ListNode dummy=new ListNode(0); dummy.next=head
遍历的逻辑
返回dummy的语法:return dummy.next

21:合并两个有序链表

题目要求:给定两个升序排列的链表list1和list2
要求:将他们合并成一个新的升序链表并返回

核心思路

双指针+虚拟头节点
将两个链表取出元素进行比较并拼接
最后将剩余链表拼接

代码实现

ListNodedummy=newListNoed(0);ListNodecur=dummy;ListNodep1=list1;ListNodep2=list2;while(p1!=null&&p2!=null){if(p1.val<p2.val){cur=p1.val;p1=p1.next;}else{cur=p2.next;p2=p2.next;}cur=cur.next;}//拼接剩余if(p1!=null){cur=p1;}else{cur=p2;}returndummy.next;

总结

要求做到升序链表,想到用双指针来判断头节点的大小
用剩余链表直接收尾

2:两数相加

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

核心思路

代码实现

ListNodedummy=newListNode(0);ListNodecur=dummy;intcarry=0;while(l1!=null||l2!=null||carry!=0){intsum=carry;if(l1!=null){sum+=l1.val;l1.l1.next;}if(l2!=null){sum+=l2.val;l2=l2.next;}carry=sum/10;cur.next=newListNode(sum%10);cur=cur.next;}returndummy.next;

总结

本题的核心是:链表逐位相加 + 进位 carry
核心三要素

  1. sum = l1 + l2 + carry
  1. 当前位 = sum % 10
  2. carry = sum / 10
http://www.jsqmd.com/news/694937/

相关文章:

  • 用C++写个小工具,让希沃管家锁屏在后台“隐身”(附源码与避坑指南)
  • 别再傻傻分不清CWE和CVE了!给开发者的5分钟快速扫盲指南
  • 数据库关系代数操作主要分为核心运算符和扩展运算符两大类
  • 数字永生伦理测试:软件测试从业者的专业视角与框架构建
  • 成年人最贵的错觉:试图在书房里把未来算死
  • 正点原子IMX6ULL开发板LVGL v8.2移植实战:从源码到触屏调试
  • 开发盲盒小程序,这些坑要避开
  • 安道利老师助力临夏腾顺驾校实现AI招生破局
  • MySQL学习笔记:乐观锁VS悲观锁/八股总结
  • SUSE Linux 11实战:用系统自带多路径连接华为OceanStor存储(iSCSI版)
  • VSCode多智能体调试正在淘汰传统单点断点模式!2024年Gartner技术成熟度报告证实:分布式调试已成为AI原生开发刚需
  • 西门子S7-1200 PLC如何通过Modbus TCP读写RFID标签?一个博图V14的实操案例
  • TiDB 混合负载场景下的 ETL 与 CDC 实践
  • 垃圾AI清理技术:系统架构、核心算法与测试挑战
  • WPF资源字典的模块化拼图:MergedDictionaries的实战应用与设计模式
  • 【ESP32实战指南】FreeRTOS核心机制解析:从任务调度到进程间通信
  • AI工程师的黄金十年:选对赛道比努力更重要
  • 4月23日足球赛事分析
  • Pikachu的python一键exp,盲注(base on boolian),盲注(base on time),宽字节注入
  • XOutput:你的老旧游戏手柄重获新生的终极兼容神器
  • 远程管理停车系统厂家推荐★智能停车系统厂家★智慧停车解决方案测评分析
  • 告别Python依赖:手把手教你用纯C在STM32F4上跑通LeNet-5(附完整源码)
  • 别再只盯着客户端了!用云函数+API工具5分钟搞定Uni-App uni-push 2.0消息测试
  • Vue3:全流程开发
  • 如何高效使用国家自然科学基金LaTeX模板:科研写作的终极指南
  • 告别‘so库丢失’:Flutter插件集成C++库时libc++_shared.so的完整配置流程
  • 如何用Spek音频频谱分析器轻松掌握音频质量检测:新手终极指南
  • 保姆级教程:在Win10的WSL2里用上你的USB摄像头(以Intel D435i为例)
  • 告别在线焦虑:B站视频下载器如何帮你永久收藏4K超清内容
  • 2027届文亮高考冲刺集训营:全职明星师资领航,助力 70 余名学员提分超百分