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# 链表 --增 -删-反转-删除最小值的更多相关文章

  1. C# 顺序表---增删改查--逆至--删除最小值

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  3. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  4. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  5. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  6. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  7. 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

    第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...

  8. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  9. StringBuilder修改字符串内容,增,删,改,插

    package seday01;/** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来完 ...

随机推荐

  1. oracle中merge的用法,以及各版本的区别 Create

    Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令,通过这个merge你能够在一个SQL语句中对一个 ...

  2. PHP实现图片压缩的两则实例(转)

    本文介绍了PHP实现图片压缩的两种方法,读者可以根据具体应用参考或加以改进,以适应自身应用需求!废话不多说,主要代码部分如下: 实例1: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  3. BZOJ1370:[Baltic2003]团伙

    浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...

  4. win32 获取本机网卡信息(MAC地址,IP地址等)

    由于一个需求需要获取网卡的MAC地址,就搜了一下,大部分都是COPY来COPY去的一些代码,有很多甚至不能直接运行或有还有内存泄漏.自己查了一下MSDN然后封装了一下: 需要注意,一个机器可能有多个网 ...

  5. phpstorm下载和破解

    http://idea.qinxi1992.cn/ 官网下载对应版本,在下面进行破解! storm官网:https://www.jetbrains.com/phpstorm/ 破解网址  :http: ...

  6. Qt中如何用QImage::Format_Indexed8表示灰度图

    QImage *qi = new QImage(data_ptr, width, height, QImage::Format_Indexed8); QVector<QRgb> grayT ...

  7. java代码。。重温JPassword,JLabel,JPanel

    package com.kk; //JPasswordField类的使用 import java.awt.Color; import java.awt.FlowLayout; import javax ...

  8. DCloud-MUI:杂项

    ylbtech-DCloud-MUI:杂项 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回 ...

  9. Oracle 存储过程学习笔记

    1.存储过程简单实例 CREATE OR REPLACE PROCEDURE 存储过程名称 (参数in,参数out) AS -- 变量声明,每个声明用分号结束.可以在声明的同时初始化 name ); ...

  10. linux下面的挂载点讲解

    linux.unix这类操作系统将系统中的一切都作为文件来管理.在windows中我们常见的硬件设备.磁盘分区等,在linux.unix中都被视作文件,对设备.分区的访问就是读写对应的文件.挂载点实际 ...