C#:删除单链表中间的节点

五,单链表 链表是一种链式存储结构,分为带头节点和不带头节点两种类型。单链表通过next域连接各节点,每个节点包含data域和next域。本文以水浒英雄排行榜为例,演示了单链表的两种实现方式:1)直接在链表尾部添加节点;2)按英雄排名顺序插入节点。代码展示了如何创建链表、添加节点和遍历链表,其中头节点不存储数据,仅作为链表的起始标记。链表的遍历通过辅助变量完成,判断节点next域是否为null来确定链表结束位置。 阅读详情

在单链表中删除一个节点,需要保持链表的连续性,即将节点的前一个节点的指针指向节点的下一个节点。在删除中间节点时,我们可以通过以下步骤实现:

  1. 首先,我们需要定义一个表示链表节点的类。该类包含一个存储节点值的属性和一个指向下一个节点的引用。
public class ListNode
{
    public int Value { get; set; }
    public ListNode Next { get; set; }

    public ListNode(int value)
    {
        Value = value;
        Next = null;
    }
}
  1. 接下来,我们可以实现一个删除中间节点的方法。该方法接收链表的头节点和要删除的节点作为参数。我们需要遍历整个链表,找到要删除的节点的前一个节点。
public void DeleteMiddleNode(ListNode head, ListNode node)
{
    if (head == null || node == null || node.Next == null)
    {
        // 无法删除头节点、空节点或尾节点
        return;
    }

    ListNode nextNode = node.Next;
    node.Value = nextNode.Value;
    node.Next = nextNode.Next;
}
  1. 现在,我们可以创建一个示例链表并测试删除中间节点的功能。
public static void Main()
{
    // 创建示例链表:1 -> 2 -> 3 -> 4 -> 5
    ListNode head = new ListNode(1);
    ListNode node2 = new ListNode(2);
    ListNode node3 = new ListNode(3);
    ListNode node4 = new ListNode(4);
    ListNode node5 = new ListNode(5);

    head.Next = node2;
    node2.Next = node3;
    node3.Next = node4;
    node4.Next = node5;

    Console.WriteLine("删除前的链表:");
    PrintLinkedList(head);

    // 删除节点3
    DeleteMiddleNode(head, node3);

    Console.WriteLine("删除后的链表:");
    PrintLinkedList(head);
}

public static void PrintLinkedList(ListNode head)
{
    ListNode current = head;
    while (current != null)
    {
        Console.Write(current.Value + " ");
        current = current.Next;
    }
    Console.WriteLine();
}
  1. 运行上述代码,输出结果如下:
删除前的链表:
1 2 3 4 5
删除后的链表:
1 2 4 5

通过以上代码,我们成功删除了链表中间的节点。删除节点的时间复杂度为O(1),因为我们只需要修改节点的值和指针,而不需要遍历整个链表。

【 C# 】(一) --------- 泛型带头节点的单链表,双向链表实现 在编程领域,数据结构与算法向来都是提升编程能力的重点。而一般常见的数据结构是链表,栈,队列,树等。事实上C#也已经封装好了这些数据结构,在头文件 System.Collections.Generic 中,直接创建并调用其成员方法就行。不过我们学习当然要知其然,亦知其所以然。 本文实现的是链表中的单链表和双向链表,并且实现了一些基本方法 一. 定义一个链表接口 MyList 接口里声明了... 阅读详情

相关推荐

C语言删除单链表中间节点的算法与编程

单链表由一个个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。要删除单链表中间的节点,我们需要找到中间节点的前一个节点,然后将其指针指向中间节点的下一个节点,从而绕过中间节点。当快指针到达链表末尾时,慢指针指向的节点就是中间节点的位置。在找到中间节点后,我们将中间节点的前一个节点的指针指向中间节点的下一个节点,从而绕过中间节点。最后,我们释放中间节点的内存,并返回链表的头节点。该函数将接受单链表的头节点作为参数,并返回删除中间节点后的链表头节点。函数打印删除中间节点后的链表。

2301_79331328的博客 407

【数据结构和算法】删除链表的中间节点

这是力扣的1657题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始链表的模块了,这道题是一道非常好的队列的例题,很有代表性。给你一个链表的头节点head。删除链表的中间节点,并返回修改后的链表的头节点head。 长度为n链表的中间节点是从头数起第⌊n / 2⌋个节点(下标从0开始),其中⌊x⌋表示小于或等于x的最大整数。 对于n=1、2、3、4和5的情况,中间节点的下标分别是0、1、1、2和2。

船到桥头自然直 2399

用C#删除单链表中间节点的具体实现

单链表是一种重要的数据结构,在实际的编程工作中经常会用到。在单链表中,每个节点都有一个指针,指向下一个节点。删除单链表中间的节点,需要将该节点的前驱节点的指针指向该节点的后继节点。在主函数中,我们创建了一个包含5个节点的单链表,然后找到了其中的中间节点(即第3个节点),并将其作为参数传递给了DeleteNode函数,然后输出了删除前后的链表。以上是用C#实现删除单链表中间节点的方法,希望能对大家有所帮助。可以看到,删除操作被正确地执行了,中间节点被从单链表中移除。用C#删除单链表中间节点的具体实现。

m0_47037246的博客 236

LeetCode 面试题 02.03. 删除中间节点

这题目类似脑筋急转弯,单向链表中无法访问前面的节点,因此删不掉该节点。若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。输出:不返回任何数据,从链表中删除传入的节点 5,使链表变为 4->1->9。假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。输入:节点 5 (位于单向链表 4->5->1->9 中)中),将其删除后,剩余链表为。

zheliku的博客 633

C#:实现删除单链列表中间的节点​(附完整源码)

C#:实现删除单链列表中间的节点​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 476

「Unity3D」Addressable版本冲突解析:SBP与Addressables兼容性问题实战指南

本文深入解析Unity3D中Addressable与SBP(Scriptable Build Pipeline)版本冲突问题,提供实战解决方案。当遇到「Build Task CreateBuiltInShadersBundle failed」错误时,可通过版本匹配、临时资源引用或构建参数调整解决。文章详细分析兼容性原理,并给出版本组合指南与最佳实践,帮助开发者高效处理资源构建问题。

weixin_29001683的博客 409

单向链表的删除方法

单向链表的删除操作,包括: 删除索引为index的结点 删除链表中第一个元素值为val的结点 删除链表中所有元素值为val的结点

m0_61925333的博客 2412

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 700

用C#实现单链表(取第i个结点元素,删除第i个结点)

初学C#记录历程,记录心情。 节点类和链表类参考前篇。 在接口IList中增加: T GetElem(int i); //取第i个元素 void ListDelete(int i); //删除第i个结点 在链表类LinkList里面直接增加方法。 取第i个元素: View Code 1 /// <summary> ...

weixin_34404393的博客 632

使用LoRa远程控制路灯(PWM调光以及LoRaWAN单播、组播、广播)

PWM调光 1、使用有pwm波输出的引脚,本例子使用timer0,PA0引脚; 2、由于timer时钟的原因,mcu不能进入休眠; 3、主控使用EFM32,代码实现如下: #define MAX_PULSE (CPU_FREQ/1000-1) #define UNIT_PULSE MAX_PULSE/100 //单位脉宽 void pwminit(void) { ...

freemote的博客 2944

手把手教你用6轴IMU跑通LIO-SAM:参数配置与代码修改保姆级教程

本文提供了一套完整的6轴IMU适配LIO-SAM的解决方案,包括参数配置与代码修改的详细步骤。从理解6轴与9轴IMU的关键差异入手,逐步指导如何调整核心配置文件params.yaml、重构utility.h关键函数、优化mapOptimization.cpp的位姿融合逻辑,并给出编译验证与性能调优建议,帮助开发者快速实现6轴IMU在LIO-SAM中的稳定运行。

weixin_28717807的博客 357

c# 数据结构 链表篇 有关单链表的一切

算代码一万一千多字 为了让新手也能看明白,我也是出息了

咩咩的博客 1768

毫米波雷达入门知识

毫米波雷达入门知识

ssbzxcvbnm1234567的博客 5442

C#单链表

原文链接 关于单链表的知识,请查阅原文,这里就不再赘述。 原文中有一处错误已经指出:获取链表中间值时,如果链表长度为偶数,原文获取的值是正确值的后一组值。 修正思路:在给A结点赋值时,使用临时结点记录结点A的值。最后输出临时结点的值与A结点的值。 using System; using System.Collections.Generic; using System.Linq; using Sys...

m0_38066968的博客 398

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1239

YOLOv11涨点改进| TGRS 2026 顶刊| 注意力改进篇| 引入MSEA多尺度边缘感知注意力,助力红外小目标检测、遥感目标检测、工业缺陷检测、图像去雨雾任务高效涨点

🔥本文提出了一种基于MSEA多尺度边缘感知注意力的YOLOv11改进模型,通过增强网络对边缘、纹理和细粒度信息的感知能力,显著提升复杂背景下的目标检测性能。MSEA模块采用多尺度空洞卷积提取上下文特征,并通过边缘监督和注意力融合机制强化目标边界信息。实验表明该方法在小目标、边界模糊目标和复杂纹理目标检测任务中表现优异,尤其在遥感、工业缺陷和红外检测等场景具有显著优势。文章详细介绍了MSEA的结构原理、核心代码实现、模块配置方法以及三种YOLOv11改进方案.

Ai缝合怪、助力小伙伴高效发论文 182

单链表的构建与查找节点

在C或C++中,首先你需要定义一个结构体(

u014114223的博客 835

12306自动抢票系统:基于DrissionPage的智能购票实战

摘要:本文介绍了一个基于DrissionPage的12306自动抢票系统实现方案。该系统通过模拟真实用户操作,实现了车票查询、登录认证、座位选择和订单提交的全流程自动化。项目采用DrissionPage库替代传统Selenium方案,具有更简洁的API设计和更好的性能表现。核心技术包括数据包监听、动作链模拟和反爬虫应对策略,实现了高效可靠的车票抢购功能。系统包含完整的业务流程设计,从环境初始化到最终订单提交,并提供了清晰的数据展示界面。本文强调该项目仅用于技术研究,在实际使用中应严格遵守12306平台规则

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 2789

C#实现单链表

【前置知识】 数据结构之链表 泛型 接口 类(属性、对C#构造器的理解) (有了这些知识,代码很快就能看懂,这些知识不熟的话,要看好久) 【节点的构成】 新建一个类,用于存放节点类 namespace SingleLinkedList { /// <summary> /// 单链表的节点 /// </summary> //...

enternalstar的博客 902

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C#实现单链表的定义、插入、删除、查找

本文介绍C#实现单链表数据结构的定义、插入、删除、查找 1、单链表的定义 /// /// 节点类 /// /// public class ListNode { //节点值 public int Value; //前一个节点 public ListNode Previous; //后一个节点 public ListNode Next; } 2、单链表头插入法 /// /// 单链表插入–头插入法 /// /// /// public static ListNode CreatList1(ref

weixin_41883890的博客 1353

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C#单链表的实现

C#单链表的实现

BabyCow的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C#数据结构之单链表(LinkList)实例详解

本文实例讲述了C#数据结构之单链表(LinkList)实现方法。分享给大家供大家参考,具体如下:这里我们来看下“单链表(LinkList)”。在上一篇《C#数据结构之顺序表(SeqList)实例详解》的最后,我们指出了:顺序表要求开辟一组连续的内存空间,而且插入/删除元素时,为了保证元素的顺序性,必须对后面的元素进行移动。如果你的应用中需要频繁对元素进行插入/删除,那么开销会很大。而链表结构正好相...

东方猫的博客 5066

C#代码创建单链表

今天分享一篇用C#代码创建单链表以及单链表的增删改查的脚本,里面具体的重要代码块我已经标明了详细的注释,推荐了解单链表数据结构的伙伴们可以直接上手,不太了解的话个人建议先去看一下单链表的数据结构! 构建单链表所需要的字段/属性的脚本 using System; using System.Collections.Generic; using System.Text; namespace 单链表 {...

qq_45071375的博客 2981

删除单链表中倒数第n个节点(JAVA)

单链表主类 参考单链表反转中的主类代码 思路 链表中有字段size是节点总个数 倒数第lastNum个节点就是正数第size-lastNum+1个节点,index=size-lastNum 删除操作需要拿到倒数第lastNum+1个节点来完成,即正数第size-lastNum个节点,index=size-lastNum-1 把该节点的next设置为该节点的next.next即可 代码 public...

cedarjo的博客 1171

c#数据结构-单链表

初学单链表。

nameyichao的博客 3954

LeetCode:删除链表中的节点(c#)

题目内容 注意 1.因为只给了要删除的节点,所以需要通过后面的节点代替当前节点被删除 实现方法一(将下个节点作为删除节点) public class Solution { public void DeleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next...

AI的博客 953
上一篇: 如何在 IntelliJ IDEA 中修改默认的 Maven 仓库地址
普通网友
博客等级 码龄3年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值