用C语言编写:输入若干个正整数(输入-1 为结束标志),按输入的逆序建立一个单向链表,并输出链表。
时间: 2023-12-20 10:18:33 浏览: 158
链表逆序实验C语言源代码
5星 · 资源好评率100%
好的,以下是用 C 语言编写的程序,实现您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node* next;
};
int main() {
struct Node* head = NULL;
// 循环读入并建立链表
int num;
printf("请输入若干个正整数,以-1作为结束标志:\n");
scanf("%d", &num);
while (num != -1) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->val = num;
newNode->next = head;
head = newNode;
scanf("%d", &num);
}
// 遍历链表,输出结果
printf("链表的逆序为:\n");
struct Node* p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
// 释放链表结点的内存
p = head;
while (p != NULL) {
struct Node* tmp = p;
p = p->next;
free(tmp);
}
head = NULL;
return 0;
}
```
上述程序中,我们同样定义了一个结构体 `Node`,表示链表中的一个结点。然后定义了链表的头指针 `head`,用来动态地建立链表。程序通过循环读入若干个正整数,每读入一个数就创建一个新的结点,并将其插入链表的头部,实现逆序建立链表。最后,程序遍历链表,输出链表的逆序。
注意,在程序最后,我们同样需要释放链表结点的内存,避免内存泄漏。这里采用了一个简单的方法,即遍历链表,逐个删除每个结点。需要注意的是,C语言中需要使用 `malloc()` 函数动态分配内存,使用 `free()` 函数释放内存。
阅读全文