我觉得问这个真的很傻,因为它看起来很简单,但我就是想不通。我要做的就是将节点指针设置为列表中的下一个节点。函数来自老师,我写了正文,所以我不想弄乱函数的负责人。
void LList::insert(int num, int at)
{
node* n = new node(num);
if (!n) throw runtime_error("Can't allocate node!");
if(!root || at == 0){
// if empty list - new node is root…
if (!root) root = n;
}
if(root){
node* nextNode = new node(num);
int numF = 0;
for (node* t = root; t != NULL ; t = t->next){
numF++;
if(numF == at){
n->next=t->next;
t->next=n;
}
}
}
}
由于您似乎正在使用n
将新节点插入链表中(我从现有代码和类名推断它是一个单向链表(,因此您必须做一些事情:
- 标识列表的现有成员,在其后将插入新节点。 您已经尝试使用该
for
循环执行此操作,但在我看来,您可能希望将其重写为while
循环,因为您可能不希望它在确定插入位置后继续迭代。 或者,一旦你找到了合适的插入位置,你就可以用break
短路for
循环,但出于风格原因,我不喜欢这样。 :) - 将新插入的节点的
next
指针设置为与 #1 中标识的节点的next
指针相同的位置。 - 将 #1 中标识的节点的
next
指针设置为指向新节点,从而重新建立链的完整性。
您的代码看起来像是尝试无序执行 #2 和 #3,这不起作用。 在你有机会指出t->next
n->next
的价值。最后,您可能需要定义一些行为,以便在添加到列表中尚未定义的位置(即插入当前具有三个元素的链表的第四个位置(时可以回退到该行为。 您可能需要重新调整循环以在 t->next
为 null 时终止,而不是在 t
本身为 null 时终止 - 否则您将失去钩子,无法将列表的(当前(最后一个元素连接到新节点。