单链表经典算法LeetCode--203.移除链表元素(两种方法解)

1.链接:. - 力扣(LeetCode)【点击即可跳转】

分析此题提供两种思路:

1.遍历原链表,将值为val的节点释放掉(双指针法)

 定义一个pcur指针指向头节点,定义一个prev指针指向NULL

需要注意:链表中有连续的val头节点就是val 的情况。

代码实现为:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeElements(struct ListNode* head, int val)
{
   struct ListNode* prev, *pcur;
   prev = NULL;
   pcur = head;
  while (pcur) //pcur为空时,跳出循环
  {
    if (pcur->val != val) 
    {
        prev = pcur; 
        pcur = pcur->next; 
    }
    else
     { // 当pcur等于val
        struct ListNode* pcurHead = pcur->next;            
        if (prev == NULL) // 头节点就为val的情况
        { 
           free(pcur); 
           head = pcurHead; // 更新头节点
           pcur = pcurHead; // 然后把新的头节点的地址赋给pcur
        }
        else 
        {   
           free(pcur); // 释放val元素
           prev->next = pcurHead; // pcurHead存的是pcur的next,所以直接赋给prev的next
           pcur = pcurHead; // 然后让pcur指向下一个节点的地址
        }
     }
  }
   return head;
}

2.找值不为val的节点,尾插到新链表中

创建新链表,定义newTail指针进行尾插,定义pcur指针进行遍历

需要注意:在跳出循环后,将newTail指向下一个节点的指针置为空。

struct ListNode* removeElements(struct ListNode* head, int val)
{
    //创建一个空链表
   struct ListNode* newHead, * newTail;
   newHead = newTail = NULL;
    //遍历原链表
   struct ListNode* pcur = head;
  while (pcur)
  {
	//找值不为val的节点,尾插到新链表中
	if (pcur->val != val)
	{
		//链表为空
		if (newHead == NULL)
		{
			newHead = newTail = pcur;
		}
		else//链表不为空
		{
			newTail->next = pcur;
			newTail = newTail->next;
		}
	}
	pcur = pcur->next;
  }
 if (newTail)
	newTail->next = NULL;
 return newHead;
}

感谢观看,如果对你有帮助,点赞支持一下吧^.^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/616921.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内存操作数及寻址方式

debug命令 debug命令,即DOS实用程序。DEBUG是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程…

数据分享—全国分省河流水系

河流水系数据是日常研究中必备的数据之一,本期推文主要分享全国分省份的水系和河流数据,梧桐君会不定期的更新数据,欢迎长期订阅。 数据预览 山东省河流水系 吉林省河流水系 四川省河流水系 数据获取方式 链接:https://pan.baidu.…

值得用来替代Vector的Java集合:ArrayBlockingQueue详解

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

C++ vs Rust vs Go 性能比较

本文对C、Rust和Go三种编程语言编写的gunzip程序进行了性能比较,通过基准测试试图尽可能公平的比较它们的性能。原文: Performance — C vs Rust vs Go 本文将通过一些基准测试,比较 C 和 Rust 以及 Go 编写的相同程序的性能。我们将尽最大努力将语言差异…

十三、Redis哨兵模式--Sentinel

上一篇介绍了Redis中的主从复制。我们知道Redis主从中一般只有主节点对外提供写操作,如果主节点发生故障,为了保证Redis的可用性,这时就要在可用的slave节点中,挑选一个作为主节点。这种切换操作如果是人为的操作,那么…

5分钟了解下HDFS

随着大数据时代的到来,传统的数据存储和管理方式已经无法满足日益增长的数据处理需求。HDFS(Hadoop Distributed File System)作为Apache Hadoop项目的一部分,以其高度的容错性、可扩展性和高吞吐量,成为了处理大规模数…

音视频开发6 音视频录制原理和播放原理

音视频录制原理 音视频播放原理

图片转word如何转换?

要将图片转换为Word文档,你可以使用以下方法之一: 以上这些方法都可以帮助你将图片中的文本转换为可编辑的Word文档,你可以根据自己的喜好和需求选择其中一种方法来操作。 使用OCR软件或在线工具:有许多OCR(Optical Ch…

动态多目标优化算法:基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解DCP1-DCP9(提供MATLAB代码)

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法(Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

保研机试之【二叉树后序】--1道题

参考:东哥带你刷二叉树(后序篇) | labuladong 的算法笔记 建议先过一遍:今天是二叉树~-CSDN博客,very重要! 然后再过一遍(理解怎么应用方法):保研机试之[三道二叉树习题…

pyqt颜色变换动画效果

pyqt颜色变换动画效果 QPropertyAnimation介绍颜色变换效果代码 QPropertyAnimation介绍 QPropertyAnimation 是 PyQt中的一个类,它用于对 Qt 对象的属性进行动画处理。通过使用 QPropertyAnimation,你可以平滑地改变一个对象的属性值,例如窗…

day04-常用API

day04 常用API 1.API 概述 API (Application Programming Interface) :应用程序编程接口 编写一个机器人程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等各种命令。 机器人厂商就会提供一些用于控制机器人的类&#xff0c…

ControlNet++:让AI图像生成更精准、更可控

在人工智能的世界里,文本到图像的生成技术正变得越来越先进。但如何确保生成的图像精确地反映我们的想象呢?最近,一项名为ControlNet的新技术为我们提供了答案。 ControlNet是一种新颖的方法,它通过优化生成图像与给定条件之间的…

C++初学者,使用汉语编程

现在的IDE是完全支持中文编程的,对于C语系的爱好者来说,又可以发挥自己的想象力了。 今天使用一些宏定义写了一个小程序,用于玩弄C。 我喜欢C语言,是因为C语言简单,语法简洁。我也喜欢汉语,因为汉语语法简…

解决axios发送post请求,springMVC接收不到数据问题

今天发现一个问题: vue组件中无法正确接收并处理axios请求 这个问题已经困扰我好久了,在电脑面前坐了两天只能确定前端应该是正确的发送了请求,但发送请求后无法正确接受后端返回的数据。 问题:vue组件无法接受后端数据 错误代码如…

Java---类和对象第一节

目录 1.面向对象初步认识 1.1什么是面向对象 1.2面向对象和面向过程的区别 2.类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.4类和对象的说明 3.this关键字 3.1访问本类成员变量 3.2调用构造方法初始化成员变量 3.3this引用的特性 4.对象的构造以…

如何建设智慧党校

随着信息技术的飞速展开,特别是近年移动互联网技术,物联网技术,人工智能技术,大数据数据的深入展开,我国快速的进入信息化社会,信息化对各行各业的改造越来越深入,任何职业,任何安排…

【Python】PYQT5详细介绍

本专栏内容为:Python学习专栏 通过本专栏的深入学习,你可以了解并掌握Python。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:Python 🚚代码仓库:小小unicorn的代码仓库🚚 &#x1f3…

vs2019 STL库里 判断函数类型的模板 is_function_v 与 is_const_v

(1)源代码如下: 经简单代码测试后,得出 vs2019 的 c 编译器 和 其 STL 库的观点与设计:is_const_v 用来判断类型 T 内是否含有 const 修饰符,含有 const 则返回真。但若 T 是含有 const 的引用类型&#xf…

实现红黑树

目录 红黑树的概念 红黑树的节点结构定义 红黑树的插入 红黑树的验证 实现红黑树完整代码 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red 或 Black 。 通过对 任何一条从根到叶子的…