[英]Indexed singly linked list
我想创建一个单链表。 我已经有一个不允许在其上建立索引的实现。 我想添加此功能,但是我不确定该怎么做。
因此,基本上头应该具有索引“ 1”。 但是我无法弄清楚自己应该如何在If语句中将索引每增加1
。
void AddNode (int addData)
{
nodePtr NewNode = new node;
NewNode->next = NULL;
NewNode->data = addData;
if (head != NULL)
{
curr = head;
while(curr->next != NULL)
{
curr = curr->next;
}
curr->next = NewNode;
NewNode->index;
}
else
{
head = NewNode;
NewNode->index = 1;
}
}
您是说能够通过get(index)获得链接列表节点等功能?
另外,您的头部不应该具有索引1,它应该为0。这不符合从零开始的标准索引编制方法。
链表在技术上没有索引,也不应存储索引。 似乎链表可能不是您正在执行的操作的正确数据结构,但是您可以使用这样的循环将其视为这样(请注意,如果我的c ++语法生锈)
int get(int index) {
Node current = head;
for (int x = 0; x < index; x++) {
if (current->next == null) {
//some sort of error handling for index out of bounds
} else {
current = current->next;
}
}
return current->data
}
get(2)将返回列表的第三个元素。
结构图为什么要将其添加到列表的末尾? 只需将新节点添加到最前面即可。
我认为没有必要遵循1,2,3的顺序。。。相反,您可以反向进行。在添加新节点之前,请访问头并找到其索引(i)。 当您添加新的索引时,该索引的索引将为i + 1。
有两个优点:-遍历此列表时,它不会改变任何内容。 -您知道已添加到此列表中的数量。
所以,你真的想要做的是增加的能力链表的索引元素。
无需将索引实际存储在任何地方(因为您实际上并不存储array/vector
元素的索引,因为类型和数组第一个元素的地址就是检索第i-th
元素所需要的一切)。
你想保留的唯一信息是因为计算是昂贵的,因为你必须从遍历列表列表的长度head
到tail
每次你需要它的时候。 获得此信息后, addNode
仅应更新列表的size
。
如您所知,访问链表i-th
元素也很昂贵(与向量相比),但是很容易编写代码。
类似于以下内容的东西应该起作用:
void get(Node* head, size_t pos) {
while (head && pos--)
head = head->next;
return pos<=0 ? head : nullptr ;
}
它head
开始遍历列表,直到到达末尾( head
为nullptr
)或pos
<=0
。 一旦您退出循环,如果pos>0
表示列表比pos
短,则可以返回head
(这将指向pos-th
元素)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.