node 类
public class Node<T>
{
public T Date;
public Node<T> Next;
public Node()
{
Date = default(T);
Next = null;
}
public Node(T value)
{
Date = value;
Next = null;
}
}
LinkList 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LinkList
{
public class LinkList<T>
{
private Node<T> _head;
private int _count;
public LinkList()
{
_head = new Node<T>();
_count = 0;
}
public void AddItem(Node<T> newNode)
{
Node<T> tmpNode = _head;
while (tmpNode.Next != null)
{
tmpNode = tmpNode.Next;
}
tmpNode.Next = newNode;
_count++;
}
public void Insert(int index, Node<T> newNode)
{
Node<T> tempNode = _head;
if (index<0 || index>_count)
{
Console.WriteLine("over!!");
return;
}
for (int i = 0; i < index; i++)
{
tempNode = tempNode.Next;
}
newNode.Next = tempNode.Next;
tempNode.Next = newNode;
_count++;
}
public T RemoveAt(int index)
{
Node<T> temp = _head;
Node<T> tempNext = default(Node<T>);
if (index < 0 || index >= _count)
{
Console.WriteLine("over!!");
return tempNext.Date;
}
for (int i = 0; i < index; i++)
{
temp = temp.Next;
}
tempNext = temp.Next;
temp.Next = tempNext.Next;
tempNext.Next = null;
_count--;
return tempNext.Date;
}
public void ShowItem(Action<int,T> ac)
{
Node<T> tmp = _head;
if (_count == 0)
{
Console.WriteLine("Null");
return;
}
for (int i = 0; i < _count; i++)
{
ac(i, tmp.Next.Date);
tmp = tmp.Next;
}
}
public Node<T> ReverseLink(Node<T> node)
{
if (node.Next == null)
{
return node;
}
Node<T> rHead = ReverseLink(node.Next);
node.Next.Next = node;
node.Next = null;
return rHead;
}
public void Reverse()
{
if (_head.Next == null || _head.Next.Next == null)
{
return;
}
_head.Next = ReverseLink(_head.Next);
return;
法二
Node node = _head.Next;
Node temp = node;
while (temp != null)
{
node = _head.Next;
if (temp != null)
{
_head.Next = temp;
temp = temp.Next;
_head.Next.Next = node;
}
else
{
temp = temp.Next;
node.Next.Next = null;
}
}
Node <T> node = _head.Next;
Node<T> shang = null;
Node<T> xia = null;
while (node != null)
{
xia = node.Next;
node.Next = shang;
shang = node;
node = xia;
}
_head.Next = shang;
}
public void LLWH_Reverse()
{
Node<T> T1, T2;
T2 = _head.Next;
_head.Next = null;
while (T2 != null)
{
T1 = T2.Next;
T2.Next = _head.Next;
_head.Next = T2;
T2 = T1;
}
}
public int GetLength()
{
return _count;
}
public void Clear()
{
_head.Next = null;
_count = 0;
}
}
}
法四应用
class MyClass
{
public string name;
public MyClass(string name)
{
this.name = name;
}
public static bool Querys(Node<MyClass> node1,Node<MyClass> node2)
{
bool returnValue = false;
if (node1.Date.name.Length > node2.Date.name.Length)
{
returnValue = true;
}
return returnValue;
}
}
class Program
{
static void Show(int index,MyClass value)
{
Console.WriteLine("第{0}个元素是 : {1}",index+1,value.name);
}
static void Main(string[] args)
{
LinkList<MyClass> link = new LinkList<MyClass>();
link.AddItem(new Node<MyClass>(new MyClass("我")));
link.AddItem(new Node<MyClass>(new MyClass("最帅")));
link.AddItem(new Node<MyClass>(new MyClass("恩恩额")));
link.AddItem(new Node<MyClass>(new MyClass("是你最帅")));
link.AddItem(new Node<MyClass>(new MyClass("是蟋蟀的帅")));
link.ShowItem(Show);
Console.WriteLine("-------删除最小值-------");
MyClass my = link.RemoveMix(MyClass.Querys);
Console.WriteLine(my.name);
link.ShowItem(Show);
Console.ReadLine();
}
}```