目录

一、涉及到的知识点

1.非升序插入的定义

2. 非升序插入不是随机插入

3.AddLast 方法

二、实例

1.自定义单向链表及非升序插入方法

2.用LinkedList链表类AddLast方法实现非升序插入


一、涉及到的知识点

1.非升序插入的定义

        单向链表是一种数据结构,其中元素以线性方式连接在一起,每个元素都指向下一个元素。非升序插入意味着元素不是按升序(从小到大)插入链表中。相反,元素可以以任何顺序插入链表中,这取决于应用程序的需要。 

2. 非升序插入不是随机插入

        在 C# 单向链表中,非升序插入并不意味着随机插入它意味着根据节点数据的大小,在链表中的适当位置插入新节点,而不是简单地将其插入到链表的末尾

        当使用非升序插入时,新节点会根据其数据大小与现有节点进行比较,然后插入到链表中的正确位置。这意味着新节点的插入位置取决于其数据大小以及链表中现有节点的数据大小。

        以下是 InsertUnAscending 方法的工作原理:

  • 如果链表为空,新节点将作为链表的头节点插入。
  • 如果链表不为空,将使用一个临时节点(temp)从头节点开始遍历链表。
  • 在遍历过程中,将比较新节点的数据与当前节点(temp)的下一个节点的数据大小。如果当前节点的下一个节点的数据小于新节点的数据,将移动到下一个节点。
  • 当找到适当的位置时,将新节点插入到当前节点(temp)的下一个节点之前,然后将新节点的下一个节点设置为当前节点的下一个节点的下一个节点。
  • 最后,将当前节点(temp)的下一个节点设置为新节点。

        这种方法确保了链表中的节点数据保持非升序排列。

3.AddLast 方法

        AddLast 方法是 C# 中 LinkedList<T> 类的一个方法,用于在链表的末尾添加一个元素。当想要将元素按任意顺序添加到链表中时,可以使用此方法。

        以下是 AddLast 方法的语法:

public void AddLast(T value);

        其中,T 是类型参数,表示链表中元素的类型。

二、实例

1.自定义单向链表及非升序插入方法

// 单向链表实现:非升序插入数据的方法
namespace _131_7
{
    public class Node
    {
        public int Data { get; set; }
        public Node? Next { get; set; }
    }

    public class LinkedList
    {
        private static Node? _head;

        public LinkedList()
        {
            _head = null;
        }

        /// <summary>
        /// 非升序插入节点数据的方法
        /// 非升序插入意味着元素不是按升序插入链表中
        /// 相反,元素可以以任何顺序插入链表中
        /// 具体实现是由程序的需求决定的
        /// </summary>
        public static void AddNonAscending(int data)
        {
            Node newNode = new() { Data = data };
            if (_head == null)
            {
                _head = newNode;
            }
            else
            {
                Node? temp = _head;
                while (temp.Next != null && temp.Next.Data < data)
                {
                    temp = temp.Next;
                }
                newNode.Next = temp.Next;
                temp.Next = newNode;
            }
        }

        // 遍历链表并打印数据
        public static void PrintList()
        {
            Node? temp = _head;
            while (temp != null)
            {
                Console.Write(temp.Data + " ");
                temp = temp.Next;
            }
            Console.WriteLine();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);

            // 插入元素,顺序不是升序
            LinkedList.AddNonAscending(11);
            LinkedList.AddNonAscending(5);
            LinkedList.AddNonAscending(3);
            LinkedList.AddNonAscending(4);
            LinkedList.AddNonAscending(2);
            LinkedList.AddNonAscending(1);
            // 遍历链表并打印元素
            LinkedList.PrintList();
        }
    }
}
//运行结果:
/*
11 1 2 3 4 5

 */

2.用LinkedList<int>链表类AddLast方法实现非升序插入

// 用LinkedList<int>链表类AddLast方法实现非升序插入
namespace _131_8
{
    class Program
    {
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);

            LinkedList<int>? list = new();
            // 插入元素,顺序不是升序
            list.AddLast(5);
            list.AddLast(3);
            list.AddLast(1);
            list.AddLast(4);
            list.AddLast(2);
            // 遍历链表并打印元素
            LinkedListNode<int>? node = list.First;
            while (node != null)
            {
                Console.WriteLine(node.Value);
                node = node.Next;
            }
        }
    }
}
//运行结果:
/*
5
3
1
4
2

 */

         从上面的示例中可以看到,元素不是按升序插入链表的。

03-01 08:34