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();
}
}```
转载请注明原文地址: https://www.6miu.com/read-5033777.html