只是尝试插入一个节点并将指针设置为下一个节点C++



我觉得问这个真的很傻,因为它看起来很简单,但我就是想不通。我要做的就是将节点指针设置为列表中的下一个节点。函数来自老师,我写了正文,所以我不想弄乱函数的负责人。

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将新节点插入链表中(我从现有代码和类名推断它是一个单向链表(,因此您必须做一些事情:

  1. 标识列表的现有成员,在其后将插入新节点。 您已经尝试使用该for循环执行此操作,但在我看来,您可能希望将其重写为while循环,因为您可能不希望它在确定插入位置后继续迭代。 或者,一旦你找到了合适的插入位置,你就可以用break短路for循环,但出于风格原因,我不喜欢这样。 :)
  2. 将新插入的节点的next指针设置为与 #1 中标识的节点的next指针相同的位置。
  3. 将 #1 中标识的节点的next指针设置为指向新节点,从而重新建立链的完整性。

您的代码看起来像是尝试无序执行 #2 和 #3,这不起作用。 在你有机会指出t->next

之前,你就抹杀了n->next的价值。

最后,您可能需要定义一些行为,以便在添加到列表中尚未定义的位置(即插入当前具有三个元素的链表的第四个位置(时可以回退到该行为。 您可能需要重新调整循环以在 t->next 为 null 时终止,而不是在 t 本身为 null 时终止 - 否则您将失去钩子,无法将列表的(当前(最后一个元素连接到新节点。

相关内容

  • 没有找到相关文章

最新更新