你的问题在这里:
void insert(node *previousNode, int num)
{
previousNode = new node;
previousNode->nodeNum = num;
previousNode->next = NULL;
}
insert(head, 20);
这就是这段代码的作用:
previousNode = new node;
创建一个指向节点的指针并将该指针分配给previousNode。PreviousNode 最初是一个复制头,现在它指向新的东西。您现在将值分配给新节点。换句话说,插入的这种实现不会插入。
你想做的更像是:
void better_insert(node *previousNode, int num)
{
node *post_node = new node; #create a brand new pointer to a brand new node
post_node->nodeNum = num; #give it a number
post_node->next = previousNode->next; #we want previousNode to be behind new node
previousNode->next = post_node;
}
它的作用是:在创建一个新节点并用新指针指向它之后,我们给它一个数字。接下来是理清指针指向的位置......
假设我们在链表中挥动一些节点。所有小写字母都是指针,好吗?
a->next = b
现在说我们希望节点x
在 之后a
,并且有数字 10... 我们调用 `better_insert(a, 10)
post_node
指向一个新节点(我们的节点 x),并被分配 10.cool...
我们想要:
a->next = x
x->next = b
我们有:
a->next = b
x->next = null
该函数的最后两行只是随机播放内容,直到符合要求
所以更详细...
我们有:
a->next = b
x->next = null
所以我们叫:
post_node->next = previousNode->next; #we want previousNode to be behind new node
现在我们有: a->next = b x->next = b
现在我们调用:
previousNode->next = post_node;
我们最终得到:
a->next = x
x->next = b
或者换句话说:
a->next = x
a->next->next = b