leetcode(力扣):203移除链表元素 leetcode(力扣):206反转链表 leetcode(力扣):876.链表的中间结点多种解法

news2024/10/3 0:28:08

目录

203.移除链表元素

解法一:将目标元素前一个元素存放地址改为下一元素地址

解法二:遍历原链表,把不是val的节点拿出来进行尾插到新链表​编辑

解法三:有哨兵位解法->头节点不存储有效数据​编辑

206.反转链表

方法一:创建新指针​编辑方法一:创建新指针进行反转​编辑

方法二:将指针方向颠倒​编辑

876. 链表的中间结点


203.移除链表元素

解法一:将目标元素前一个元素存放地址改为下一元素地址

struct ListNode* removeElements(struct ListNode* head, int val)
{
	struct ListNode* prev = NULL;
	struct ListNode* cur = head;

	if (head == NULL)//检验链表是否为空
	{
		return head;
	}

	while (cur)
	{
		if (cur->val == val)
		{
			if (cur == head)//if(prev==NULL) 
			{
				//头删->以防该数组组成相同倒是prev一直为NULL导致error
				head = cur->next;
				free(cur);
				cur = head;
			}
			else
			{
				//删除
				prev->next = cur->next;//将cur上一个元素的指针存放的地址改为cur存放的地址即cur下一个元素的地址
				free(cur);//释放cur
				cur = prev->next;//使cur指向prev的下一个元素
			}
		}
		else
		{
			prev = cur;
			cur = cur->next;
		}
	}
	return head;
}

解法二:遍历原链表,把不是val的节点拿出来进行尾插到新链表

struct ListNode* removeElements(struct ListNode* head, int val)
{
	struct ListNode* cur = head;
	struct ListNode* tail = NULL;
	head = NULL;//防止野指针

	while (cur)
	{
		if (cur->val == val)
		{
			//删除
			struct ListNode* del = cur;
			cur = cur->next;
			free(del);
		}
		else
		{
			//尾插->第一步
			if (tail==NULL)
			{
				head = tail = cur;
			}
			else
			{
				tail->next = cur;
				tail = tail->next;
			}
			cur = cur->next;
		}
	}
	if(tail!=NULL)
		tail->next = NULL;//防止野指针

	return head;
}

解法三:有哨兵位解法->头节点不存储有效数据

该解法好处在于无需考虑第一步尾插

struct ListNode* removeElements(struct ListNode* head, int val)
{
	struct ListNode* cur = head;
	struct ListNode* tail = NULL;

	//哨兵位的头节点
	head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));
	tail->next = NULL;

	while (cur)
	{
		if (cur->val == val)
		{
			//删除
			struct ListNode* del = cur;
			cur = cur->next;
			free(del);
		}
		else
		{
			tail->next = cur;
			tail = tail->next;
			cur = cur->next;
		}
	}
	tail->next=NULL;

	//释放哨兵位
	struct ListNode* del = head;
	head = head->next;
	free(del);

	return head;
}

206.反转链表

方法一:创建新指针方法一:创建新指针进行反转

 struct ListNode* reverseList(struct ListNode* head)
{
    struct ListNode* newhead = NULL;
    struct ListNode* cur = head;

    while (cur)
    {
        //存放cur下一节点地址
        struct ListNode* next = cur->next;

        //头插
        cur->next = newhead;//将前一个节点地址存放在当前cur中
        newhead = cur;//nwehead后移

        cur = next;//原链表指针后移一位
    }
    return newhead;
}

方法二:将指针方向颠倒

struct ListNode* reverseList(struct ListNode* head)
{
   //防止链表为空
   if (head == NULL)
   {
       return NULL;
   }

   struct ListNode* n1, * n2, * n3;
   n1 = NULL;
   n2 = head;
   n3 = n2->next;

   while (n2)
   {
       //倒指向
       n2->next = n1;

       //迭代
       n1 = n2;
       n2 = n3;

       //防止n3越界访问
       if (n3)
           n3 = n3->next;
   }
   //最后一步时,n1=n2处于反转后首元素位置,故直接return n1
   return n1;
}

876. 链表的中间结点


构建两个指针:快慢指针slow,fast
slow一次走一步,fast一次走两步,当fast走到尾的时候slow就走到了中间。
偶数有两个中间节点,题目要求返回第二个->fast==NULL; 是停止。

struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* slow, * fast;
    slow = fast = head;

    //fast:检验奇数,fast->next:检验偶数
    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次说清楚BCD编码

背景 在银行报文中,有很多用到BCD编码的地方,BCD编码和常见的二进制编码或者ASCII编码又有区别,所以很容易搞错,弄错概念,下面笔者就一次把BCD编码讲清楚。 一,概念 1,BCD编码,…

vue开发调试

1、调试方式 1.1 为什么调试 当遇到应用逻辑出现错误,但又无法准确定位的时候,同后台项目开发一样,可以在JS实现的应用逻辑中设置断点,并进行单步、进入方法内、跳出方法等调试,从而准确定位问题根源。 1.2 调试方法…

NC 添加IRule 后置前置规则

1、在保存后触发后置规则,找到保存的规则,在里面进行添加后置规则。 编写自己的规则,通过 CompareAroundProcesser 《AggCLMasterVo》 processor 的processor.addAfterRule(rule); 方法进行后置规则添加 Cl_SAVE_IRule : 实现 IR…

【API 管理】什么是 API 管理,为什么它很重要?

当今复杂的数字生态系统由许多相互关联的部分组成。API 作为看门人和连接器在其中发挥着关键作用——提供了许多最终用户甚至没有注意到的自动化机会和效率。 企业密切关注 API。它们对于应用程序、数据和各种客户交互的功能至关重要。 这使得 API 管理成为几乎每个部门的组织…

[计算机入门] 搜索文件

3.7 搜索文件 随着计算机的使用,里面存放的资料会越来越多,有些文件我们可能不记得存放在哪里了,这个时候就可以通过计算机自带的搜索功能进行搜索。 1、点击任务栏中的放大镜图标: 2、在弹出的窗口下方输入要查询的文件名&…

华为云云服务器评测|详解 Nacos 安装部署

环境配置 服务器云耀云服务器L操作系统CentOS 7.9 64bit | 公共镜像JDK64 bit JDK 1.8MavenMaven 3.2.xnacos-server2.2.3 下载地址 官方githubRelease 2.2.3 (May 25th, 2023) alibaba/nacos GitHub百度网盘链接:https://pan.baidu.com/s/1K8UE6iJL2ZnosUY83b…

案例聚焦:F5怎么样提升游戏玩家体验?

对手机游戏市场有过了解的小伙伴,定然对Deltatech Gaming Limited这个公司不会陌生。作为印度在线游戏和娱乐行业的领跑者,两个最受欢迎的多人游戏应用分别为多人游戏的 “Addagames” 和扑克类游戏 “Adda52” ,它们会定期举办在线联赛。而这…

【Apollo】Apollo的入门介绍

阿波罗是百度发布的名为“Apollo(阿波罗)”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。 帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。 百度开放此项计划旨在建立一个以合作为中…

c语言 3.0

💂 个人主页: 程序员爱摸鱼🤟 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注点赞收藏(一键三连)哦💅 想寻找共同成长的小伙伴,可以互粉哦 💬文章目录…

某堡垒机SQL注入漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、概述 中远麒麟堡垒机能够提供细粒度的访问控制,最大限度保护用户资…

前后端分离项目-基于springboot+vue的it职业生涯规划系统的设计与实现(内含代码+文档+报告)

it职业生涯规划系统在jdk环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务。总之,it职业生涯规划系统集中管理信息,有着保密性强,效率高,存储空间大…

xctf攻防世界 MISC之CatFlag

0x01.进入环境,下载附件 拿到的是一个无后缀的flag文件,用winhex打开后发现是奇奇怪怪的乱码,用kali的strings搜索也没找到flag情况。 0x02.问题分析 题目提示如图: 让直接cat就行,在kali中直接尝试输入&#xff1a…

百度云智大会:科技与创新的交汇点

​ 这次的百度云智大会,可谓是亮点云集—— 发布了包含42个大模型、41个数据集、10个精选应用范式的全新升级千帆大模型平台2.0,发布首个大模型生态伙伴计划,而且也预告了文心大模型4.0的发布,大模型服务的成绩单也非常秀&#x…

198/213动态规划之打家劫舍系列

这两天在学习的时候,发现有个打家劫舍的题目,有意思的很,分享给大家。 基础题目 题目内容 198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互…

Navicat 携手华为云 GaussDB,联合打造便捷高效的数据库开发和建模工具方案

近日, Navicat Premium 顺利完成与华为云 GaussDB的兼容性测试认证,并获得华为云授予的技术认证书。 ​ 合作 Navicat 作为华为云 GaussDB 生态工具合作伙伴以及 Gocloud 合作伙伴,此次合作旨在通过Navicat 多年来在数据库开发管理工具上的积…

uniapp 下拉框数据回显的问题

问题 : 现在是下拉框数据回显不了, 绑定的v-model 原因 : uniui 下拉框数据绑定要是 value text 这种格式的 解决办法: 将获取到的后端数据 转换为 需要的格式 ,再进行绑定 下拉框的数据 遍历

08.SCA-CNN

目录 前言泛读摘要IntroductionRelated Work 精读Spatial and Channel-wise Attention CNNOverviewSpatial AttentionChannel-wise AttentionChannel-SpatialSpatial-Channel ExperimentsDataset and Metric设置 评估Channel-wise Attention(问题1)评估M…

VBA实现语料或术语表奇偶行分列和双列合一

一、问题的提出 日常的双语语料处理或者术语格式转化过程中经常要用到下面的操作: 1.在Excel中把一列双行即上下对照的形式改为左右对照。如下图所示,把A转化为B这种样式。 2. 把B这种左右对归照转化为A这种上下对照样式。 二、问题的解决 这个问题看…

腾讯汤道生:超千亿参数 超2万亿tokens 腾讯混元大模型向行业全面开放

9月7日,2023腾讯全球数字生态大会在深圳宝安举行。腾讯集团高级执行副总裁、云与智慧产业事业群CEO汤道生表示,腾讯将迈入“全面拥抱大模型”时代:“以大模型生成技术为核心,人工智能正在成为下一轮数字化发展的关键动力&#xff…

修改this.$notify通知的样式

注意:样式要写在全局里,不能写在scoped里