对链接列表的第一个和最后一个元素的困惑

雨藏

对于在链表的前面还是后面添加元素,我感到困惑。让我们假设我们有一个链表是这样:x->a->c->v; 在这里,x第一个还是最后一个元素?其次,如果要添加x->a->c->v->h我该怎么办h->x->a->c->v当我遇到以下问题时,这使我感到困惑:

考虑实现循环单链列表数据结构。假设ptr循环链表的指针指向最后一个节点,其link字段指向链表的第一个节点。完成下面的add(...)delete(...)指定的算法您可以编写伪代码或C代码。假定链表节点结构的以下声明:

typedef struct list_node* list_pointer;
typedef struct list_node {
     int value;
     list_pointer link;
}

list_pointer ptr = NULL;

请注意,如果循环链表为空,则其指针ptr将设置为NULL

// Add node at the front of the circular list ptr; ptr points at the last node in the list
void add(list_pointer *ptr, list_pointer node) { ... }

// Delete the front node from the list ptr
list_node delete(list_pointer *ptr) { ... }
斯蒂芬·多西

用于链接列表的常用术语是headtail

在非循环列表中,就像您在问题中显示的那样,该head节点将是列表中其他任何节点都没有指向的节点,因此您需要另一个指针(即一个listHead指针)来指向它。由于您通常从listHead指向该节点的节点开始遍历列表head因此也可以将该first节点视为列表中节点。

在非循环列表中,该tail节点是不指向任何其他节点的节点。可以将其视为last列表中节点。

现在,在一个循环列表中,就像您在链接的文本中引用的列表一样,headand tail,and offirst和and的定义last可能会稍微复杂一些,因为每个节点都指向另一个节点,并且另一个节点指向该节点。循环列表的开始和结束位置通常由列表的排序顺序(如果有一个或多个其他遍历条件来控制列表的排序顺序)决定。

基本的循环列表可以包含一个listHead指针,指针指向first您在通过列表时应访问节点。

一些更高级的循环列表将变为使用listTail指针,指向列表的最后一个节点。这样做是因为,有了循环列表,head如果您有指向该tail节点的指针,就很容易到达节点,因为该tail节点将指向该head节点。因此,通过提供指向该tail节点的指针,您可以快速访问列表中lastfirst节点。这是链接文本所描述的数据结构的类型。

现在,对于您有关插入的问题,这取决于您以及如何使用列表。如果列表是无序的,则插入新节点作为head列表的新节点要快得多但是,如果要实现先进先出列表,则可能要插入新节点作为tail列表的新节点当然,如果列表中有订单,则基于每个节点包含的一些数据,那么您想要在列表中找到正确的位置以插入新节点以保留该订单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从嵌套列表的子列表中提取第一个和最后一个元素

删除数组中的第一个和最后一个元素

ul列表中的第一个和最后一个VISIBLE元素

列表中连续对的和,包括最后一个元素与第一个元素的和

NumPy数组中的第一个和最后一个元素

Python切片列表中的第一个和最后一个元素

打印链接列表时,最后一个元素值出现在第一个和最后一个位置

python27 matplotlib:连接的第一个和最后一个元素

仅循环第一个和最后一个元素

列表OCaml的第一个和最后一个元素

Java列表处理第一个和最后一个元素

减少ndarray的第一个维度-保留第一个和最后一个元素

使用pd.Grouper()获取第一个和最后一个元素

获取列表之间第一个和最后一个公共元素的索引的最快方法

在列表的最后一个空间上拆分第一个元素

查找大于阈值的NumPy数组的第一个和最后一个元素

链接列表:查询存储在SQL表中的链表的第一个和最后一个元素

在Python列表中查找元素的第一个和最后一个出现的最佳方法是什么?

保留数组的第一个索引元素和最后一个索引元素

ConcurrentSkipListSet访问第一个和最后一个元素的复杂性

遍历numpy ndarray,管理第一个和最后一个元素

减少数组到第一个和最后一个元素的元组?

C-交换单链列表中的第一个和最后一个元素

R:识别重复组中的第一个和最后一个元素

使用递归查找列表的第一个和最后一个元素

如果第一个和最后一个元素相等,则完整列表

丢弃 datetimeindex 的所有元素,除了第一个和最后一个

交替打印最后一个元素和第一个元素(JavaScript)

循环列表,好像最后一个元素在第一个之前