用c语言编写程序建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入0时,表示结束并使输出的数字与输入数字相反
时间: 2023-12-14 09:36:41 浏览: 80
以下是用C语言编写的带头结点的单向链表程序,可以实现输入一组数字,遇到0时倒序输出。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node, *LinkedList;
// 初始化带头结点的单向链表
LinkedList initLinkedList() {
LinkedList L = (LinkedList)malloc(sizeof(Node));
L->next = NULL;
return L;
}
// 向链表末尾添加结点
void appendNode(LinkedList L, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
Node* p = L;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
// 遍历链表并逆序输出
void reverseOutput(LinkedList L) {
if (L->next == NULL) {
return;
}
Node* p = L->next;
int arr[100];
int i = 0;
while (p != NULL) {
arr[i++] = p->data;
p = p->next;
}
for (int j = i - 1; j >= 0; j--) {
printf("%d ", arr[j]);
}
printf("\n");
}
int main() {
LinkedList L = initLinkedList();
printf("请输入数字(以0结束):\n");
int data;
scanf("%d", &data);
while (data != 0) {
appendNode(L, data);
scanf("%d", &data);
}
reverseOutput(L);
return 0;
}
```
在这个程序中,我们使用了带头结点的链表来存储数字,以便于在遍历链表时方便的处理头结点和普通结点。在输入数字时,我们通过循环读取输入的数字并将其添加到链表末尾。在输出时,我们先遍历链表并将其存储到一个数组中,然后再倒序输出数组中的元素。
阅读全文