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. BZOJ3110:[ZJOI2013]K大数查询(整体二分版)

    浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...

  2. loj 2542 随机游走 —— 最值反演+树上期望DP+fmt

    题目:https://loj.ac/problem/2542 因为走到所有点的期望就是所有点期望的最大值,所以先最值反演一下,问题变成从根走到一个点集任意一点就停止的期望值: 设 \( f[x] \) ...

  3. (转)C# -- 扩展方法的应用(Extension Methods)

    本文转载自:http://blog.csdn.net/zxz414644665/article/details/9793205 当你有下面这样一个需求的时候,扩展方法就会起到作用:在项目中,类A需要添 ...

  4. java代码随机数100个,10个一输出显示======

    总结:空格???懂否?如何显示 for(int i=0;i<100;i++){ if(i%10==0){ System.out.println(); } System.out.print(n[i ...

  5. Mysql 关键字-保留字

    ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE C ...

  6. C Primer Plus学习笔记(三)- 字符串和格式化输入/输出

    从一个简单的例子开始 #include <stdio.h> int main() { char name[10]; printf("Input Your Name:\n" ...

  7. 使用/dev/dsp的wav文件播放器源码

    转载于:http://blog.csdn.net/dux003/article/details/5459423 #include #include #include #include #include ...

  8. Android键盘属性

    在主xml中android:windowSoftInputMode的属性"stateUnspecified"软键盘的状态(是否它是隐藏或可见)没有被指定.系统将选择一个合适的状态或 ...

  9. cookie禁用后非重定向跳转时session的跟踪

  10. JAVA中string类的split方法

    split([separator,[limit]])第一个参数为分隔符,可以是一个正则表达式,第二个参数为返回结果数组的长度