代码随想录算法训练营第三天
从今天开始进入链表的学习
思路:
Leetcode中给出的链表头结点并不是书上写的不存元素的虚拟头结点,而是书上所说的首元结点。也就是head就是链表的第一个结点。
这个题目有两种解题方法:
第一种:直接在原数组上操作。
- 定义两个指针
p
和q
,其中p
指向当前节点,q
用于辅助删除节点。 - 遍历链表,直到遍历到链表的末尾或者
p
的下一个节点为空。 - 在遍历过程中,判断
p
的下一个节点的值是否等于给定的val
。- 如果相等,说明需要删除该节点,将
q
指向该节点,然后将p
的下一个指针指向q
的下一个节点,即跳过了节点q
。 - 如果不相等,说明节点值不是要删除的值,将
p
移动到下一个节点。
- 如果相等,说明需要删除该节点,将
- 循环结束后,如果头节点
head
的值等于给定的val
,则将头节点指向下一个节点,即删除头节点。 - 返回修改后的链表头节点
第二种:虚拟头结点操作
细节点:当一个指针不用时,记得要释放空间,虽然不报错。
思路挺简单的,不说了。
思路:反转链表同样用虚拟头结点的方法,但是并不是真正创建了一个结点,而是一个空指针pre,分为递归和双指针两种方法。
双指针法:当cur指针不为NULL时,用temp记录下当前指针的下一位,此时我们有了三个指针。先把当前指针cur指向pre,再把这两个指针向后移动一位,继续以上操作,直到cur == NULL,即cur指针到达链表最后一位的后一位,此时pre指针在最后一位,返回pre。因为cur代表的本来就是头结点了,并不是虚拟结点的下一位
递归法:递归法和双指针法主体上类似,只是每次直接就传了temp和cur指针,不需要pre和cur向后移动
这个题目有点难,还没搞清楚
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgekcbe
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01