目录
一、涉及到的知识点
1.定义
2.双向链表与单向链表的区别
二、实例
一、涉及到的知识点
1.定义
在双向链表中,每个节点有两个指针域,一个指向它的前一个节点(即直接前驱),另一个指向它的后一个节点(即直接后继)。这种设计使得双向链表可以进行双向遍历,即可以从头节点开始向前遍历,也可以从尾节点开始向后遍历。
双向链表的节点结构通常如下所示:
struct Node
{// 数据域int data;// 指向直接前驱的指针Node* prev;// 指向直接后继的指针Node* next;
};
2.双向链表与单向链表的区别
双向链表的算法描述和单向链表基本相同,但是双向链表在删除和插入节点时与单向链表有很大的不同:双向链表在删除节点时,不但要修改节点的直接后继指针,还要同时修改节点的直接前驱指针。在插入时更是要修改插入节点的前驱和后继的两个方向上的指针。
二、实例
在实例的双向链表类中,设计一个Append方法向链表的末尾追加初始数据5,2,8,1。然后用Print方法显示链表数据。
// 双向链表实现:Append方法、Print方法namespace _132_1
{public class Objects(int num, string name, int count){public int Num { get; set; } = num;public string Name { get; set; } = name;public int Count { get; set; } = count;}public class ListNode(Objects obj){public Objects Object { get; set; } = obj;public ListNode? Next { get; set; } = null;}public class LinkedList{private ListNode? _head;private ListNode? _tail;public void Append(Objects obj){ListNode newNode = new(obj);if (_head == null){_head = newNode;_tail = newNode;}else{_tail!.Next = newNode;_tail = newNode;}}public void Print(){ListNode? current = _head;while (current != null){Console.WriteLine(current.Object.Num);current = current.Next;}}}public class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);LinkedList linkedList = new();linkedList.Append(new Objects(5, "Five", 1));linkedList.Append(new Objects(2, "Two", 2));linkedList.Append(new Objects(8, "Eight", 3));linkedList.Append(new Objects(1, "One", 4));linkedList.Print();}}
}
//运行结果:
/*
5
2
8
1*/