合肥有做网站的吗,mc建筑网站,电子商务网站建设实践课题背景,北京网站建设怎么样天文章目录前言#xff1a;问题描述#xff1a;解题思路#xff08;双指针法#xff09;#xff1a;代码实现#xff1a;总结#xff1a;前言#xff1a;
此篇是针对链表的经典练习题。
问题描述#xff1a;
给你一个链表的头节点 head 和一个整数 val #xff0c;请…
文章目录前言问题描述解题思路双指针法代码实现总结前言
此篇是针对链表的经典练习题。
问题描述
给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val val 的节点并返回 新的头节点 。 示例 1
输入head [1,2,6,3,4,5,6], val 6 输出[1,2,3,4,5]
解题思路双指针法
1、设置两个均指向头节点的指针pre记录待删除节点的前一节点和 cur (记录当前节点)
2、遍历整个链表查找节点值为 val 的节点找到即删除该节点否则继续查找。
① 找到将当前节点的前一节点之前最近一个值不等于 val 的节点(pre)连接到当前节点cur的下一个节点即将 pre 的下一节点指向 cur 的下一节点pre-next cur-next。
② 没找到更新最近一个值不等于 val 的节点即 pre cur并继续遍历cur cur-next。
这里以链表 1-2-6-3-4-5-6, val 6 为例子利用双指针进行删除操作如下 在这里插入图片描述
代码实现
struct ListNode* removeElements(struct ListNode* head, int val){while (NULL ! head head-val val) {head head-next;}struct ListNode* cur head;struct ListNode* pre head;while (cur ! NULL) {if (cur-val val) {pre-next cur-next;} else {pre cur;}cur cur-next;}return head;
}总结