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. 使用POI导出excel基础篇

    最近搞了下POI导出Excel,听说很多次,却是第一次搞. 在pom.xml中引入依赖 <dependency> <groupId>org.apache.poi</gro ...

  2. Azure CLI脚本查看未挂载的ManagedDisk

    本文介绍如何用Azure CLI的脚本查看未挂载的Managed Disk,以及Managed Disk挂载到哪些资源. 具体的脚本如下: #!/bin/bash rm -rf noownerdisk ...

  3. Redis 复制技术和高可用sentinel(哨兵模式)

    redis的复制技术和高可用(哨兵模式) 1 复制 为什么要复制 实现数据的多副本存储,从而可以实现服务的高可用 提供更好的读性能复制技术的关键点及难点 如何指定被复制对象 增量还是全量以及如何实现增 ...

  4. C# EntityFramwork(Model First)使用要点

    本文介绍EntityFramework使用方法 Entity Framework的注意点 由于安装和操作的细节讲起来很琐碎,这部分只罗列出难点,其他细节请自行查阅 安装细节 Pluralize or ...

  5. Vue2.0+Webpack+Element+Axios+vueRouter技术栈使用过程总结

    搭建项目架构 目采用Webpack+Vue-router的架构方式,开始安装(一切操作都在windows系统上完成) 1.按Win+R,然后在文本框中输入cmd,回车打开命令行,输入vue-cli安装 ...

  6. 问题:HttpContext.Current.Session;结果:Session与HttpContext.Current.Session到底有什么区别呢?

    我在做练习的时候遇到了这样一个问题,在母版页页面中写入登录和密码修改的js代码,在登录的方法中写 入 HttpContext.Current.Session.Add("UserPwd&quo ...

  7. 用JS,打印正立三角形

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. 【坑】idea+tomcat

    idea用tomcat外置容器部署debug要清掉webapp里面的同名项目,否则就呵呵呵呵了

  9. matlab学习笔记(3)

    数据分析: 多项式: 多项式表示:p = [1 2 3 0]; //表示 1*x^3+2*x^2+3*x^1+0 ,系数从高次向低次项,0系数不能省略. roots函数:求解多项式的根.roots(p ...

  10. 剑指offer 39_二叉树的深度

    #include <stdio.h> #include <malloc.h> typedef int Item; typedef struct node{ Item m_val ...