我想创建一个单链表。我已经有一个不允许索引的实现。 我想添加此功能,但我不知道该怎么做。
所以基本上头部应该有索引“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
答案 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
元素。
您要保留的唯一信息是列表的长度,因为计算成本很高,因为每次需要时,您必须遍历列表从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
元素)