gpt4 book ai didi

c - 如何从上到下打印链表节点

转载 作者:行者123 更新时间:2023-11-30 18:27:09 25 4
gpt4 key购买 nike

我正在尝试创建链接列表。我可以一一添加节点,但无法按我想要的方式打印链接列表。如何从上到下打印链表节点

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

struct node{
int N;
struct node *next;
};

struct node* newNode(int number, struct node *next) {
struct node *new = malloc(sizeof(*new));
new->N = number;
new->next = next;
return new;
}

void show(struct node *head){
struct node *c;
c = head;
while (c!=NULL){
printf("%d\n",c->N);
c = c->next;
}
}

int main (void ) {
struct node *head = NULL;

head = newNode(10, head);
head = newNode(20, head);
head = newNode(30, head);
head = newNode(40, head);

show(head);
return 0;
}

输出40302010

我正在尝试打印如下所示的节点

10203040

如何获得以上输出?

最佳答案

由于我知道这可能是练习的一部分,因此我将尝试以帮助的方式回答它,同时仍然给出全面的答案。

我不考虑您将元素插入头部的事实 - 我不确定这是否是您想要做的,我认为问题是“一旦我正确输入了元素,如何向后打印它?”。

我们必须研究可能的解决方案:

1) 创建一个方法 void addToTail(Node* head, int value); 遍历列表并将元素添加到列表的尾部而不是头部。旁注:此操作的时间成本很高,因为它需要 O(N) 时间复杂度。关于复杂性,read more here 。瑟也this StackOverflow 问题。

2)你提到了术语“链表”。根据您的说法,您没有指定它是单链接还是双链接。由于您可以访问节点实现,因此我建议您向每个节点添加一个指向前一个元素的指针,从而将单链表转换为双链表。

struct node{
int N;
struct node *next;
struct node *prev;
};

当然,您需要在列表的操作中分别更新此节点 - 否则它将无法工作 - 我将其交给您。

这样,您将能够轻松地向后迭代列表,以便按所需的顺序打印数字。

3) 您可以实现一个函数 Node * reverseList(Node* head); 通过迭代“反转”列表,然后使用它来打印反转的列表。再说一次,我把实现交给你了。当然,您需要每次都考虑列表状态,以及是否需要就地反转列表或返回指向新的反转列表的指针(如上面的函数约定所示)。

您现在需要做的是重新阅读您的练习摘要,停下来思考一下:“我真的需要这些解决方案吗?这是我所要求的吗?”。

如果您只是以错误的顺序输入数据,则可能不会。

但是,如果您特别要求向后打印列表元素,那么您将获得一些关于如何继续的很好的提示。

关于c - 如何从上到下打印链表节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58972205/

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