【发布时间】:2020-03-17 05:24:13
【问题描述】:
我正在尝试制作链表。我可以一个一个地添加节点,但我无法打印我想要的链表。如何从上到下打印链表节点
#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;
}
输出 40 30 20 10
我正在尝试像下面这样打印节点
10 20 30 40
如何获得以上输出?
【问题讨论】:
-
这不是有效的 C++。请不要标记不相关的语言(
new是 C++ 中的关键字) -
您正在正确打印列表,从头到尾。但是,您每次都在头部添加元素,但将其视为堆栈。您可以将新元素添加到尾部而不是头部,或者将列表从后面(尾部)打印到前面(头部)。
-
你会考虑改变你当前的列表结构吗?您可以切换到双链表,然后将新元素添加到尾部或从尾部开始迭代。
-
您正在将新节点插入到列表的开头。如果你在最后插入,那么你会得到预期的结果。
-
您可以采取两条主要路线: 1. 将结构修改为双向链表;在这里,您有上一个(前)链接以及下一个链接,因此您可以从最后开始并向后工作。 2. 将列表向下工作,直到找到结尾,然后将其打印出来;跟踪最后一个并打印出来,也许使用递归调用。您希望向后打印列表的频率与添加或删除元素的频率是您在选择 1 或 2 时可以考虑的因素。
标签: c linked-list