下面给出了简单的对LinkedListNode排序代码,方便日后Copy:
public class LinkListNodeSort<T>
{
public delegate int DgtCompare(LinkedListNode<T> tNode, LinkedListNode<T> pNode);
DgtCompare dgtCompare;
public void SetCompareAlgorithm(DgtCompare compare)
{
dgtCompare = compare;
}
public void Sort(LinkedList<T> lnk, DgtCompare compare)
{
dgtCompare = compare;
Sort(lnk);
}
public void Sort(LinkedList<T> lnk)
{
LinkedListNode<T> cNode;
LinkedListNode<T> pNode;
LinkedListNode<T> tNode;
cNode = lnk.First;
int result;
bool IsSwitch;
while (cNode != lnk.Last)
{
tNode = cNode;
pNode = cNode;
IsSwitch = false;
do
{
pNode = pNode.Next;
result = dgtCompare(tNode, pNode);
if (result > 0)
{
tNode = pNode;
IsSwitch = true;
}
} while (pNode != lnk.Last);
if (IsSwitch)
{
lnk.Remove(tNode);
lnk.AddBefore(cNode, tNode);
}
cNode = tNode.Next;
}
}
}
使用范例如下:
void main()
{
LinkedList<int> lnk = new LinkedList<int>();
Random rnd = new Random();
for (int i = 0; i < 15; i++)
{
lnk.AddLast(rnd.Next(0, 30));
}
foreach (int i in lnk)
{
Console.Write(i.ToString() + " ");
}
LinkListNodeSort<int> lsort = new LinkListNodeSort<int>();
lsort.Sort(lnk, Compare);
Console.WriteLine();
foreach (int i in lnk)
{
Console.Write(i.ToString() + " ");
}
}
private int Compare(LinkedListNode<int> tNode, LinkedListNode<int> pNode)
{
if (tNode.Value > pNode.Value) return 1;
else if (tNode.Value < pNode.Value) return -1;
else return 0;
}