gpt4 book ai didi

c - 在链表中出队

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:20 25 4
gpt4 key购买 nike

我正在尝试让我的出列方法在我的 LinkedList ADT 实现中发挥作用。但是,它是从队列的开头而不是结尾删除的。有什么帮助吗?我是 C 的新手,正在尝试将 Java 练习移植到 C 中。它应该删除列表的最后一个节点。

这是我的出列方法:

static void linkedQueueDequeue(Queue* q) {
LinkedQueue *lq = ((LinkedQueue*)q->privateData);
Node* temp = lq->head->next;
lq->head->data = lq->head->next->data;
lq->head->next = temp->next;
free(temp);
lq->size--;


}

这是尝试使最后一个节点出队时的输出:

=====================
|Testing LinkedQueue|
=====================
adding 1 to first node
adding 2 to second node
adding 3 to third node
adding 4 to fourth node
[1,2,3,4]
dequeue last node
should print [1,2,3]
[2,3,4]
return first node
peek: 2
what's the size?
size: 3

最佳答案

正如您已经看到的,linkedQueueDequeue 中的代码弹出第一个条目,就像您想要一个堆栈(后进先出)一样,您可以将 temp 迭代到列表的末尾,然后删除它的 temp->下一步:

static void linkedQueueDequeue(Queue* q) {
LinkedQueue *lq = ((LinkedQueue*)q->privateData);
Node* temp = lq->head->next;
while(temp->next) temp = temp->next;
free(temp->next);
temp->next = 0;
lq->size--;
}

另请注意,考虑到第 2 行中的转换 (LinkedQueue*)q,您的 Queue/LinkedQueue 实现有些奇怪。您确定需要该转换吗?我真的不能说,因为你没有给我们 Queue 和 LinkedQueue 的定义。 LinkedQueue 中是否还有一个->tail?如果是这样,那么您不需要迭代,而是可以使用 ->tail 来定位 temp (当然:您必须更新 ->tail 到新的结尾)。

关于c - 在链表中出队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9206563/

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