C# 链表 --增 -删-反转-删除最小值
1.

Node.cs
namespace 链表
{
public class Node<T>
{
public T Data;
//这个就是地址
public Node<T> Next; //构造函数用来初始化
public Node()
{
Data = default(T);
Next = null;
}
public Node(T value)
{
Data = value;
Next = null;
}
}
}
2.LinkList.cs
namespace 链表
{ //一般链表都是有头部节点的,简称头结点,头结点不参与运算
public class LinkList<T>
{
private Node<T> _head;
private int _count; public LinkList()
{
_head = new Node<T>();
_count = ;
} public void AddItem(Node<T> newNode)
{
Node<T> tmpNode = _head; //找到头结点
while (tmpNode.Next != null) //循环找到最后节点
{
tmpNode = tmpNode.Next; //一直下移
}
tmpNode.Next = newNode; //将最后节点和即将插入的节点连接
_count++;
} public int GetLength()
{
return _count;
} public void Insert(int index, Node<T> newNode) //插
{
if(index<||index>_count)
{
Console.WriteLine("Over");
return;
}
Node<T> tmpNode = _head;
for (int i = ; i < index; i++)
{
tmpNode = tmpNode.Next;
}
//tmpNode (index的前一个节点)
newNode.Next = tmpNode.Next;
tmpNode.Next = newNode;
_count++;
}
//第一个为index,第二个为value
public void ShowItem(Action<int,T> ac)
{
if (_count ==)
{ Console.WriteLine("空");
return;
}
Node<T> tmpNode = _head.Next;
for (int i = ; i < _count; i++)
{
ac(i, tmpNode.Data);
tmpNode = tmpNode.Next;
}
} public T RemoveAt(int index)
{
T returnValue = default(T); // 定义一个data的返回值
if (index < || index >= _count)//判断是否出界
{
Console.WriteLine("error");
goto returnTip;
}
Node<T> tmpNode = _head; //删除节点的前一个节点
for (int i = ; i < index; i++)//循环走
{
tmpNode = tmpNode.Next;
}
Node<T> deleteNode = tmpNode.Next; //要删除的节点
tmpNode.Next = tmpNode.Next.Next;//牵手删除节点的后一个节点
deleteNode.Next = null;//不让其连接
_count--;
returnValue = deleteNode.Data;//返回删除节点的数据data
returnTip:
return returnValue;
} public void Reverse() //链表反转
{
if (_count < )
{
Console.WriteLine("链表长度不足");
return;
}
Node<T> x1, x2; x2 = _head.Next;
_head.Next = null;
while (x2 != null)
{
x1 = x2.Next;
x2.Next = _head.Next;
_head.Next = x2;
x2 = x1;
}
} public T RemoveMinDemo(Func<Node<T>,Node<T>,Boolean> _func) //删除最小值
{
Node<T> deletePreMin, deleteMin, PreMin, Min; deletePreMin = PreMin = _head;
deleteMin = Min = _head.Next;
while (Min != null)
{
if (_func(Min,deleteMin))
{
deletePreMin = PreMin;
deleteMin = Min;
}
PreMin = PreMin.Next;
Min = Min.Next;
}
deletePreMin.Next = deletePreMin.Next.Next;
deleteMin.Next = null;
_count--; return deleteMin.Data;
} public void Clear()
{
_head.Next = null;
_count = ;
} }
}
3.Program.cs
namespace 链表
{
class Program
{
public static bool SH(Node<int> a, Node<int> b)
{
if (a.Data > b.Data)
{
return false;
}
return true;
} public static void Show(int index, int value)
{
Console.WriteLine("第{0}个元素是{1}",index+,value);
} static void Main(string[] args)
{
LinkList<int> linklist = new LinkList<int>();
linklist.AddItem(new Node<int>());
linklist.AddItem(new Node<int>());
linklist.AddItem(new Node<int>());
linklist.AddItem(new Node<int>());
linklist.AddItem(new Node<int>());
linklist.AddItem(new Node<int>()); linklist.Reverse();//反转
//9 3 10 4 21 100
linklist.RemoveMinDemo(SH); //删除最小值
linklist.ShowItem(Show);
Console.WriteLine(linklist.GetLength());
Console.ReadLine();
}
}
}
输出结果:
5为链表的长度
C# 链表 --增 -删-反转-删除最小值的更多相关文章
- C# 顺序表---增删改查--逆至--删除最小值
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 好用的SQL TVP~~独家赠送[增-删-改-查]的例子
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...
- iOS sqlite3 的基本使用(增 删 改 查)
iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...
- MVC EF 增 删 改 查
using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...
- python基础中的四大天王-增-删-改-查
列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...
- 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据
第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...
- django ajax增 删 改 查
具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...
- StringBuilder修改字符串内容,增,删,改,插
package seday01;/** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来完 ...
随机推荐
- BZOJ2276:[POI2011]Temperature
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...
- BZOJ1293:[SCOI2009]生日礼物
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...
- Surface Pro 4远程桌面分辨率问题
Surface Pro 4是非常收欢迎的笔记本电脑.但我们这些技术人员在使用中有一点非常不方便: Surface Pro 4的分辨率非常高,如果用Surface Pro 4远程桌面到远端的一台机器,因 ...
- 蓝桥杯 算法训练 ALGO-117 友好数
算法训练 友好数 时间限制:1.0s 内存限制:256.0MB 问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:1+3=4 ...
- perform-maintence-on-replica-set-members
https://docs.mongodb.com/v3.0/tutorial/perform-maintence-on-replica-set-members/ 1 oplog 改变大小 --详见mo ...
- STL容器迭代器失效问题讨论
STL源码剖析---迭代器失效小结 vector迭代器的几种失效的情况: .当插入(push_back)一个元素后,end操作返回的迭代器肯定失效. .当插入(push_back)一个元素后,capa ...
- Ueditor/自定义配置
UEditor除 了具有轻量.可定制等优点外,还始终将优化编辑操作.提升用户体验摆在了很重要的位置.在这一点上,除了对编辑器功能.性能.实现细节等不断地改进和追求 创新之外,众多灵活而人性化的自定义配 ...
- Monitoring tools that everyone's currently using
Although a lot of new tools have arrived since 2011, it's clear that older open source tools like Na ...
- Unencapsulate SVM root mirror (ZT)
http://www.seedsofgenius.net/solaris/quick-reference-unencapsulate-svm-root-mirror Often times admin ...
- Ok6410裸机驱动学习(三)C语言内嵌汇编
1.C语言内嵌汇编使用方法 C内嵌汇编以关键字”_asm_或asm开始,下辖4个部分,各部分之间用“:”分开,第一部分是必须写的,后面3个部分可以省略,但是分号:不能省略 优化后的代码 2.汇编程序框 ...
