请教C语言链表 求详细分析错误原因 感谢
为什么num会变成问号只用一个指针遍历链表删除链表节点的特定值的方式只用一个指针便利链表删除结点...
为什么num 会变成问号 只用一个指针遍历链表删除链表节点的特定值 的方式 只用一个指针便利链表删除结点
展开
展开全部
1 delete函数没有考虑如果head指向的节点就是要删除的节点的情况。如果删除的节点是dead,调用delete函数之后,后续所有操作都是错误的。因为把第一个节点删除之后应该让head指向下一个。
在遍历单向链表的时候,通常有两个指针,一个是当前节点(current_node),一个是前一个节点(previous_node)。当遍历开始时,他们应该都初始化为head。遍历期间让current_node = previous_node->next;
当我们删除的时候要判断要删除的节点是不是head,如果是删除完成后要重新给head赋值。代码:
Q* deletenode(Q* head, int data)
{
Q* current_node = head, *previous_node = head;
while(current_node != NULL)
{
if (current_node->score == data)
{
if (head == current_node) head = current_node->next;
previous_node->next = current_node->next;
free(current_node);
current_node = previous_node->next ;
continue;
}
previous_node = current_node;
current_node = current_node->next;
}
return head;
}
2 node函数没有问题,但是list函数感觉有问题,要创建n个节点,直接一个for循环就可以,没有必要判断是不是1个节点。list只要返回一个head指针就好,如果传进如的node节点数为0,直接返回NULL即可。
在遍历单向链表的时候,通常有两个指针,一个是当前节点(current_node),一个是前一个节点(previous_node)。当遍历开始时,他们应该都初始化为head。遍历期间让current_node = previous_node->next;
当我们删除的时候要判断要删除的节点是不是head,如果是删除完成后要重新给head赋值。代码:
Q* deletenode(Q* head, int data)
{
Q* current_node = head, *previous_node = head;
while(current_node != NULL)
{
if (current_node->score == data)
{
if (head == current_node) head = current_node->next;
previous_node->next = current_node->next;
free(current_node);
current_node = previous_node->next ;
continue;
}
previous_node = current_node;
current_node = current_node->next;
}
return head;
}
2 node函数没有问题,但是list函数感觉有问题,要创建n个节点,直接一个for循环就可以,没有必要判断是不是1个节点。list只要返回一个head指针就好,如果传进如的node节点数为0,直接返回NULL即可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询