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

(链表)移除链表元素(双指针法)

文章目录

    • 前言:
    • 问题描述:
    • 解题思路(双指针法):
    • 代码实现:
    • 总结:

前言:

此篇是针对链表的经典练习题。

问题描述:

给你一个链表的头节点 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;
}

总结:

在这里插入图片描述

http://www.lryc.cn/news/57991.html

相关文章:

  • Raft协议
  • 动态规划概述
  • CPU缓存架构+Disruptor内存队列
  • Spark SQL join操作详解
  • 设计模式-day04
  • 线段树的学习(2023.4.5)
  • Java 实现excel、word、txt、ppt等办公文件在线预览功能
  • 《Vue3实战》 第九章 路由
  • ToBeWritten之物联网Zigbee协议
  • 【万象奥科】RZ/G2UL网关内存压力测试
  • C++中的继承
  • SpringRetry接口异常优雅重试机制
  • 2023年全国最新高校辅导员精选真题及答案46
  • 程序员为了女朋you进了华为,同学去了阿里,2年后对比收入懵了
  • Linux中的算法分离手段
  • 机器学习实战:Python基于Logistic逻辑回归进行分类预测
  • Leetcode.404 左叶子之和
  • Android 11.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(二)
  • C语言CRC-16 IBM格式校验函数
  • Maven高级-聚合和继承
  • 如何写出10万+ Facebook 贴文?
  • 图像处理数据集
  • 文本聚类与摘要,让AI帮你做个总结
  • leaflet实现波动的marker效果(131)
  • 关于Dataset和DataLoader的概念
  • 前端与JS变量
  • 初始SpringBoot
  • vue+springboot 上传文件、图片、视频,回显到前端。
  • java入门-W3(K81-K143)
  • English Learning - L2 语音作业打卡 复习元音 [ɜː] [æ] 辅元连读技巧 Day42 2023.4.3 周一