C# 双向链表LinkedList的排序

1.函数

打印链表函数PrintLinkedList 和 排序函数SortLinkedList

注:下面代码中的链表每项都是double类型,如果换做其他的类型或结构,则需要适当修改

/// <summary>
/// 打印链表各结点信息
/// </summary>
/// <param name="ll"></param>
private static void PrintLinkedList(LinkedList<double> ll, string title = "")
{
    //打印标题
    Console.WriteLine(string.Format("-- {0} --",
        string.IsNullOrWhiteSpace(title) ? "打印链表" : title));

    //逐个结点打印链表
    LinkedListNode<double> lln = ll.First;
    int counter = 0;
    while (lln != null)
    {
        Console.WriteLine(string.Format("第 {0} 个结点值为 {1}",
            counter++, lln.Value.ToString("#0.0")));
        lln = lln.Next;
    }
}

/// <summary>
/// 返回一个排序后的链表
/// </summary>
/// <param name="linkedlist">待排序链表</param>
/// <param name="isAsc">true:升序/false:降序</param>
/// <returns></returns>
private static LinkedList<double> SortLinkedList(
    LinkedList<double> linkedlist, bool isAsc = true)
{
    LinkedList<double> result = new LinkedList<double>();

    foreach (double nodevalue in linkedlist)
    {
        LinkedListNode<double> lln = result.First;
        while (true)
        {
            if (isAsc) //升序排列时情况
            {
                if (lln == null)
                {
                    result.AddLast(nodevalue);
                    break;
                }
                else if (nodevalue <= lln.Value)
                {
                    result.AddBefore(lln, nodevalue);
                    break;
                }
                else
                {
                    lln = lln.Next;
                }
            }
            else //降序排列时情况
            {
                if (lln == null)
                {
                    result.AddLast(nodevalue);
                    break;
                }
                else if (nodevalue >= lln.Value)
                {
                    result.AddBefore(lln, nodevalue);
                    break;
                }
                else
                {
                    lln = lln.Next;
                }
            }
        }
    }

    return result;
}

2.Main函数调用

static void Main(string[] args)
{
    //测试用数组
    double[] array = new double[] 
    {
        3.5, 2.5, 6.2, 8.0, 1.3, 
        4.6, 5.5, 2.7, 8.4, 9.7
    };

    //生成链表ll
    LinkedList<double> ll = new LinkedList<double>();
    for (int i = 1; i < array.Length; i++)
    {
        ll.AddLast(array[i]);
    }

    //打印链表ll
    PrintLinkedList(ll, "原链表");
    //对链表ll进行排序(升序)
    ll = SortLinkedList(ll);
    //打印排序后的链表ll
    PrintLinkedList(ll, "链表(升序)");
    //对链表ll进行排序(降序)
    ll = SortLinkedList(ll, false);
    //打印排序后的链表ll
    PrintLinkedList(ll, "链表(降序)");

    Console.ReadLine();
}

3.运行结果

000057_ouJI_1425762.png

转载于:https://my.oschina.net/Tsybius2014/blog/227365

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值