索引单链表

时间:2017-06-30 14:28:18

标签: c++

我想创建一个单链表。我已经有一个不允许索引的实现。 我想添加此功能,但我不知道该怎么做。

Linked List

所以基本上头部应该有索引“1”。但我无法弄清楚自己在If语句中应该做些什么来逐步增加$('#yourform').validate({ rules: { propBacklink: { // rules for propBacklink required: false, // <- superfluous (default) url: true, remote: { url: "backlinkInDB.php", type: "post" }, CheckNextFields: true }, X: { // rules for X }, Y: { // rules for Y }, Z: { // rules for Z }, .... }, .... 的索引。

1

3 个答案:

答案 0 :(得分:2)

你的意思是能够通过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)将返回列表的第3个元素。

答案 1 :(得分:0)

Graph for the structure 为什么要将其添加到列表的末尾?只需将新节点添加到前面即可。

我认为没有必要按照1,2,3的顺序......相反,你可以反过来做 在添加新节点之前,您将访问头部并找到它的索引(i)。当你添加新的索引时,这个索引将是i + 1。

两个优点: - 循环浏览此列表时,它不会改变任何内容。 - 您知道已添加到此列表中的数量。

答案 2 :(得分:0)

所以你真正想做的是将能力添加到链表的索引元素中。

  • 没有必要将索引实际存储在任何地方(因为你没有真正存储array/vector元素的索引作为类型,并且数组的第一个元素的地址就是你的一切需要检索i-th元素。

  • 您要保留的唯一信息是列表的长度,因为计算成本很高,因为每次需要时,您必须遍历列表从headtail。获得此信息后,addNode应仅更新列表的size

正如您所知,访问链接列表的i-th元素也很昂贵(与向量相比),但编码很容易。

以下内容应该有效:

void get(Node* head, size_t pos) {
    while (head && pos--)
        head = head->next;
    return pos<=0 ? head : nullptr ;
}

它遍历head的列表,直到它到达结尾(headnullptr)或pos<=0。 一旦您离开循环,如果pos>0表示该列表短于pos,否则您可以返回head(将指向pos-th元素)