gpt4 book ai didi

C: Enqueue() - 在链表末尾插入,返回链表头

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:32 26 4
gpt4 key购买 nike

我是编程新手。尝试编写一个函数来接收列表的头部 + 要插入的数据 - 并传回列表的新头部。我已经通过将元素添加到列表的头部来完成很多工作,但出于某种原因,我无法理解这个细微的差别。

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct node_{
int data;
struct node_ *next;
} Queue;

int main(void){

Queue* queue = NULL;

queue = enqueue(queue, 1);

assert(queue->next == NULL);
assert(queue->data == 1);

queue = enqueue(queue, 2);

assert(queue->data == 1);
assert(queue->next != NULL);
assert(queue->next->data == 2);

free(queue->next);
free(queue);

return 0;

}

Queue *enqueue(Queue *queue, int data){

Queue *new_node, *p;

new_node = malloc(sizeof(Queue));

new_node->data = data;
new_node->next = NULL;

p = queue;

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

p->next = new_node;

return ??????

}

我知道要插入头部,你可以:

new_node->data = data; 
new_node->next = queue;
return new_node;

如果我上面写的没有多大意义,我深表歉意。我很累,我已经经历了很多次迭代。可能遗漏了一些明显的东西。

最佳答案

只需返回queue。您还必须测试输入 queue 是否为 NULL,在这种情况下您显然无法访问 next 指针来找到结尾,因此在这种情况下只需返回新节点。

Queue *enqueue(Queue *queue, int data){

Queue *new_node, *p;

new_node = malloc(sizeof(Queue));
new_node->data = data;
new_node->next = NULL;

if (!queue)
return new_node;

p = queue;
while (p->next)
p = p->next;
p->next = new_node;

return queue;
}

关于C: Enqueue() - 在链表末尾插入,返回链表头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com