目录
2.用LinkedList链表类AddLast方法实现非升序插入
单向链表是一种数据结构,其中元素以线性方式连接在一起,每个元素都指向下一个元素。非升序插入意味着元素不是按升序(从小到大)插入链表中。相反,元素可以以任何顺序插入链表中,这取决于应用程序的需要。
在 C# 单向链表中,非升序插入并不意味着随机插入。它意味着根据节点数据的大小,在链表中的适当位置插入新节点,而不是简单地将其插入到链表的末尾。
当使用非升序插入时,新节点会根据其数据大小与现有节点进行比较,然后插入到链表中的正确位置。这意味着新节点的插入位置取决于其数据大小以及链表中现有节点的数据大小。
以下是 InsertUnAscending 方法的工作原理:
这种方法确保了链表中的节点数据保持非升序排列。
AddLast 方法是 C# 中 LinkedList
以下是 AddLast 方法的语法:
public void AddLast(T value);
其中,T 是类型参数,表示链表中元素的类型。
- // 单向链表实现:非升序插入数据的方法
- 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;
- }
-
- ///
- /// 非升序插入节点数据的方法
- /// 非升序插入意味着元素不是按升序插入链表中
- /// 相反,元素可以以任何顺序插入链表中
- /// 具体实现是由程序的需求决定的
- ///
- 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
- */
- // 用LinkedList
链表类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
- */
从上面的示例中可以看到,元素不是按升序插入链表的。