C语言练习题-C语言练习题实例73

题目:反向输出一个链表。
程序分析:首先遍历链表,将每个节点的数据保存在数组中。然后按照相反的顺序输出数组中的数据。
实例
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode{
int data;
struct LNode *next;
} LNode, *LinkList;
LinkList CreateList(int n);
void print(LinkList h);
void reversePrint(LinkList h);
int main() {
LinkList Head = NULL;
int n;
printf("请输入链表的节点个数:");
scanf("%d", &n);
Head = CreateList(n);
printf("刚刚建立的链表元素的值为:\n");
print(Head);
printf("反向输出链表元素的值为:\n");
reversePrint(Head);
printf("\n\n");
system("pause");
return 0;
}
LinkList CreateList(int n) {
LinkList L, p, q;
int i;
L = (LNode*)malloc(sizeof(LNode));
if (!L)
return NULL;
L->next = NULL;
q = L;
for (i = 1; i <= n; i++) {
p = (LinkList)malloc(sizeof(LNode));
printf("请输入第%d个元素的值:", i);
scanf("%d", &(p->data));
p->next = NULL;
q->next = p;
q = p;
}
return L;
}
void print(LinkList h) {
LinkList p = h->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void reversePrint(LinkList h) {
int array[100];
int i = 0;
LinkList p = h->next;
while (p != NULL) {
array[i++] = p->data;
p = p->next;
}
for (i = i - 1; i >= 0; i--) {
printf("%d ", array[i]);
}
printf("\n");
}
在上述代码中,我们定义了一个结构体 LNode
,用于表示链表的节点,包括一个整型数据 data
和一个指向下一个节点的指针 next
。
然后,我们定义了 CreateList()
函数,用于创建链表。通过循环获取用户输入的节点数据,并将其保存到新建节点中,然后按照链表的顺序连接这些节点,最终返回链表的头节点。
在 main()
函数中,我们首先获取用户输入的链表节点个数 n
,然后调用 CreateList()
函数创建链表,并将返回的链表头节点保存在 Head
变量中。
接下来,我们调用 print()
函数,遍历链表并输出节点的数据。
然后,我们定义了 reversePrint()
函数,该函数用于反向输出链表的数据。首先,我们使用一个数组 array
来保存链表节点的数据。然后,按照相反的顺序遍历数组并输出数组中的数据。
最后,程序通过返回 0
来结束程序的执行。