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

C++ 只是尝试插入一个节点并将指针设置到下一个节点C++;,c++,insert,linked-list,nodes,C++,Insert,Linked List,Nodes,问这个问题我觉得很傻,因为它看起来很简单,但我就是想不出来。我要做的就是将节点指针设置为列表中的下一个节点。这个函数是由一位老师写的,我写了主体,所以我不想弄乱函数的头部 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

问这个问题我觉得很傻,因为它看起来很简单,但我就是想不出来。我要做的就是将节点指针设置为列表中的下一个节点。这个函数是由一位老师写的,我写了主体,所以我不想弄乱函数的头部

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
    循环,因为您可能不希望它在确定插入位置后继续迭代。或者,一旦找到了正确的插入位置,您可以使用
    断路器将
    for
    循环短路,但出于风格原因,我不喜欢这样做。:)
  • 将新插入的节点的
    next
    指针设置为与#1中标识的节点的
    next
    指针指向的相同位置
  • 将#1中标识的节点的
    next
    指针设置为指向新节点,从而重新建立链的完整性
  • 您的代码看起来好像试图按顺序执行#2和#3,但这不起作用。在您有机会指向
    n->next
    之前,您正在擦除
    t->next
    的值


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

    node*nextNode=new node(num)完全未使用。这个代码中有任何原因吗?另外,
    root=nullptr
    对于当前列表来说也不是一个好兆头,如果您将一个节点前置到开头(at=0),并且已经存在一个或多个节点。无需在每次使用
    new
    进行分配尝试后检查null。。。如果一个兼容的新处理程序实现无法分配内存,它将抛出
    bad\u alloc
    ,而您可能需要
    n->next=t->next;t->next=n
    插入一个新节点,但整个函数看起来有点奇怪。哎呀,我不是有意要在其中插入下一个节点,我在安装这个之前就把它取出来了。你可能会惊讶于这有多么简单