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

lc hot 100之:dummy哨兵节点创建方法

嗨嗨嗨大家好!今天又写了一题链表,发现自己不会创建dummmy哨兵节点qvq(应该是c语言语法忘光光了哈哈哈哈哈哈)所以求助了一下ai整理了两种哨兵节点的创建方法~

题目的思路并不难但也很巧妙,

首先我们想肯定要找到最后一个节点往前遍历才能找到倒数第n个节点,对吧?

再想想【双指针】呢?如果有两个指针left和right,right一开始就比left快n个位置,那么是不是right到末尾时,left正好是倒数第n个

这样只需要遍历一次就好啦! 

删除节点需要找到该节点的前一个节点,此外我们还要考虑删完后链表为空的情况。

因此,提前加入dummy哨兵节点就可以完美解决这两个问题!(保证删完后链表不为空是哨兵节点的重要应用)

代码:

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {// 由于可能会删除链表头部,用哨兵节点简化代码// ListNode dummy{0, head};ListNode *dummy=new ListNode(0,head);ListNode *left=dummy, *right=dummy;while(n--){right=right->next;//right后移n个,这样1right到末尾时left正好是第n个}while(right->next){right=right->next;left=left->next;}left->next=left->next->next;return dummy->next;}
};

接下来详细介绍dummy的两种创建方法!

第一种:动态分配哨兵节点

ListNode *dummy=new ListNode(0,head);
ListNode *left=dummy, *right=dummy;
  • ​原理​​:使用new在堆上分配内存
  • ​生命周期​​:手动控制,必须delete显式释放(题目中可能不需要)

第二种: 栈分配哨兵节点

ListNode dummy{0, head};
ListNode *left=&dummy, *right=&dummy;
  • ​原理​​:在函数栈帧中创建局部变量
  • ​生命周期​​:函数执行期间存在,函数返回时自动释放

注意:

  • dummy 是一个 ListNode 类型的对象
  • left 是一个 ListNode* 类型的指针
  • &dummy 获取 dummy 的内存地址

一定要注意和上一种方法不一样的地方!!!!!!

重新给出代码:

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {// 由于可能会删除链表头部,用哨兵节点简化代码ListNode dummy{0, head};// ListNode *dummy=new ListNode(0,head);// ListNode *left=dummy, *right=dummy;ListNode *left=&dummy, *right=&dummy;while(n--){right=right->next;//right后移n个,这样1right到末尾时left正好是第n个}while(right->next){right=right->next;left=left->next;}left->next=left->next->next;return dummy.next;}
};

并且,还有一处不一样的地方

如果创建的dummy是实际对象(第二种方法),那么return dummy.next;

如果创建的dummy是ListNode* 类型的指针(第一种方法),那么return dummy->next;

完结撒花!希望下次能自己写出来dummy的创建!耶又弄明白了一个知识点!

相关文章:

  • 每天总结一个html标签——Audio音频标签
  • 代码训练LeetCode(21)跳跃游戏2
  • rknn优化教程(一)
  • StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台
  • 极客时间-《搞定音频技术》-学习笔记
  • 网络寻路--图论
  • R语言基础| 下载、安装
  • 图论水题2
  • 在树莓派上添加音频输入设备的几种方法
  • PyTest框架学习
  • 【读代码】从预训练到后训练:解锁语言模型推理潜能——Xiaomi MiMo项目深度解析
  • day46 python预训练模型补充
  • HTTP常见的请求方法、响应状态码、接口规范介绍
  • Elasticsearch 集群运维常用命令详解
  • Python趣学篇:用数学方程绘制浪漫爱心
  • git引用概念(git reference,git ref)(简化对复杂SHA-1哈希值的管理)(分支引用、标签引用、HEAD引用、远程引用、特殊引用)
  • Pytest+Selenium UI自动化测试实战实例
  • 力扣HOT100之二分查找:74. 搜索二维矩阵
  • 2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
  • SkyWalking架构深度解析:分布式系统监控的利器
  • 有关网站建设的参考书/设计师经常用的网站
  • 襄阳网站seo厂家/360推广登录平台
  • 网站设计用什么做/怎么做网页设计的页面
  • 河北建设厅注册中心网站首页/怎么做ppt
  • 做版权保护的网站/可以放友情链接的网站
  • 新闻网站原创内容建设/进入百度app