C语言/数据结构——每日一题(移除链表元素)

ops/2024/9/25 9:14:25/

一.前言

今天在leetcode刷到了一道关于单链表的题。想着和大家分享一下。废话不多说,让我们开始今天的知识分享吧。

二.正文

1.1题目要求

1.2思路剖析

我们可以创建一个新的单链表,然后通过对原单链表的遍历,将数据不等于val的节点移到新的单链表上。循环往复,新单链表上的元素就是全部不等于val的元素了。此时return 我们的新单链表的头节点,就完成了这道题目。

我们可以让新单链表的头节点设为 ,ListNode* phead,尾节点为ListNode* ptail。(ListNode*为单链表数据类型)

phead用于我们后面返回该链表的头节点(因此头节点不可随意设置)

ptail用于我们在给新单链表尾部插入旧单链表的时候,方便通过尾节点ptail链接我们后面插入的元素。值得注意的是(假设后面插入的元素是pafter):当我们通过ptail->next链接尾部插入的元素pafter后,不要忘了让ptail=ptail->next。让ptail指向pafter代表的地址(事实上就是使pafter代表的元素为尾节点)

1.3代码实现

以下就是在leetcode环境下运行的源代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;struct ListNode* removeElements(struct ListNode* head, int val)
{ListNode* pcur = head;ListNode* phead;ListNode* ptail;// ListNode* phead,*ptail;phead=ptail=NULL;//ListNode* pcur=head;if (head==NULL)return head;else{while (pcur){if (pcur->val!= val){if (phead==NULL){phead = ptail = pcur;}else{ptail->next = pcur;ptail = ptail->next;}}pcur = pcur->next;}}if(ptail!=NULL)ptail->next = NULL;
return phead;
}

这里面有个易踩的坑就是这里ptail->next=NULL;这一步是必须的。否则当你通过示例一的时候你会发现输出的结果是1,2,3,4,5,6。

你可能会疑惑为什么前面的6被除掉了,后面的6没有被除掉呢?

这是因为当尾节点ptail指向代表元素5的时候,ptail->next实际指向的还是元素6的地址。因此在最后我们需要将ptail->next=NULL。才能正确返回1,2,3,4,5。

三.结文

美好的时光总是短暂的。今天的题目分享就到此结束了,咱们下期再见。


http://www.ppmy.cn/ops/31848.html

相关文章

深入探索HTML与CSS:构建网页的基础

深入探索HTML与CSS:构建网页的基础 文章目录 深入探索HTML与CSS:构建网页的基础一、引言二、HTML:网页的骨架1. HTML文档结构2. HTML常用标签3. HTML表单 三、CSS:网页的装扮师1. CSS基本语法2. CSS选择器3. CSS盒模型4. CSS布局流…

基于YOLOv8的水稻虫害识别系统,加入BiLevelRoutingAttention注意力进行创新优化

💡💡💡本文摘要:基于YOLOv8的水稻虫害识别,阐述了整个数据制作和训练可视化过程,并加入BiLevelRoutingAttention注意力进行优化,最终mAP从原始的 0.697提升至0.732 博主简介 AI小怪兽&#xff…

如何选择适合的美国站群服务器:经济实惠而可靠的选择

如何选择适合的美国站群服务器:经济实惠而可靠的选择 在今天的数字化时代,选择适合的服务器对于个人网站或企业来说至关重要。一台性能稳定、价格实惠的美国站群服务器能够为您的网站提供所需的支持,但在选择之前,有一些关键因素…

服务器被攻击,为什么后台任务管理器无法打开?

在服务器遭受DDoS攻击后,当后台任务管理器由于系统资源耗尽无法打开时,管理员需要依赖间接手段来进行攻击类型的判断和解决措施的实施。由于涉及真实代码可能涉及到敏感操作,这里将以概念性伪代码和示例指令的方式来说明。 判断攻击类型 步…

ClickHouse高原理与实践

ClickHouse高原理与实践 1 ClickHouse的特性1.1. OLAP1.2. 列式存储1.3. 表引擎1.4. 向量化执行1.5. 分区1.6. 副本与分片1.7 其他特性 2. ClickHouse模块设计2.1 Parser分析器与Interpreter解释器2.2 Storage2.3 Column与Field2.4 DataType2.5 Block2.6 Cluster与Replication …

使用 XTuner 完成llama3小助手认知微调

1.首先请报名课程: 2.环境配置 conda create -n llama3 python3.10 conda activate llama3 conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda12.1 -c pytorch -c nvidia 2.1 下载模型 新建文件夹 mkdir -p ~/model cd ~/model 从Op…

机器学习(五)之损失函数

上面几节讲了监督学习和非监督学习的一些算法(目前还不完整,会慢慢补充哒) 如果文章内容有错误,欢迎小伙伴在评论区指出! 前言: 损失函数在机器学习中非常重要,直接关乎模型的好坏(so?学好它)…

JVM笔记1--Java内存区域

1、运行时数据区域 从上图可以看出来,Java虚拟机运行时数据区域整体上可以分成5大块: 1.1、程序计数器 程序计数器是一块较小的内存空间。它可以看做当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是…