【问题标题】:Move value to end of queue in C将值移动到C中的队列末尾
【发布时间】:2014-02-05 22:28:35
【问题描述】:

我是 C 的新手,我正在尝试使用此函数将值移动到队列的末尾。它在前两次有效,但第三次出现了关于 while 循环的问题,我不确定是什么原因造成的。任何帮助都将不胜感激。 :)

void enqueue(queue q, int value)
{
    if (q == NULL)
    {
        return;
    }

    // Create new node
    node * newNode = (node *)malloc(sizeof(node));

    if (newNode == NULL)
    {
        return;
    }

    // Add node to end of queue
    newNode->value = value;

    if (q->head == NULL)
    {
        newNode->next = q->head;
        q->head = newNode;
    }
    else
    {
        node * head = q->head;

        while (head->next != NULL)
        {
            head = head->next;
        }

        // Update queue pointer
        head->next = newNode;
    }
}

【问题讨论】:

  • 代码看起来不错,可能是代码的其他部分有问题
  • 尝试确保每次创建新节点时,其下一个指针为空。所以在“newNode->value = value”之后的这一行添加“newNode->next = NULL”

标签: c linked-list queue


【解决方案1】:

如果q->head 不为NULL,则您永远不会设置newNode->next,使其未初始化。遍历列表的下一个代码将跟随这个未初始化的指针,导致未定义的行为并可能导致崩溃。

要解决这个问题,你只需要初始化newNode->next

newNode->value = value;
newNode->next = NULL;
if (q->head == NULL)
{
    q->head = newNode;
}
else
    /* your code as before */

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2021-10-01
    • 2011-06-22
    • 1970-01-01
    • 2023-03-17
    • 2016-06-16
    • 2011-12-17
    相关资源
    最近更新 更多