单链表 - 双链表

单链表 - 双链表

1. 单链表 (singly linked list)

单链表是一种使用指针来存储值的数据结构。链表中的每个节点包含一个字段,用于指向链表的下一个节点。另外有一个独立的根指针指向链表的第 1 个节点。由于节点在创建时是采用动态分配内存的方式,所以它们可能分布于内存之中。遍历链表是根据指针进行的,所以节点的物理排列无关紧要。单链表只能以一个方向进行遍历。

为了把一个新值插入到一个有序的单链表中,你首先必须找到链表中合适的插入位置。对于无序单链表,新值可以插入到任何位置。把一个新节点链接到链表中需要两个步骤。首先,新节点的 link 字段必须设置为指向它的目标后续节点。其次,前一个节点的 link 字段必须设置为指向这个新节点。在许多其他语言中,插入函数保存一个指向前一个节点的指针来完成第 2 个步骤。但是,这个技巧使插入到链表的起始位置成为一种特殊情况,需要单独处理。在 C 语言中,你可以通过保存一个指向必须进行修改的 link 字段的指针,而不是保存一个指向前一个节点的指针,从而消除了这个特殊情况。

2. 双链表 (doubly linked list)

双链表中的每个节点包含两个 link 字段:其中一个指向链表的下一个节点,另一个指向链表的前一个节点。双链表有两个根指针,分别指向第 1 个节点和最后一个节点。因此,遍历双链表可以从任何一端开始,而且在遍历过程中可以改变方向。为了把一个新节点插入到双链表中,我们必须修改 4 个指针。新节点的前向和后向 link 字段必须被设置,前一个节点的后向 link 字段和后一个节点的前向 link 字段也必须进行修改,使它们指向这个新节点。

发布了509 篇原创文章 · 获赞 1824 · 访问量 110万+

猜你喜欢

转载自blog.csdn.net/chengyq116/article/details/104870042