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
插入一个新节点,但整个函数看起来有点奇怪。哎呀,我不是有意要在其中插入下一个节点,我在安装这个之前就把它取出来了。你可能会惊讶于这有多么简单