c语言写一个程序,任意输入几个数,用链表逆序输出
时间: 2024-03-19 22:45:53 浏览: 67
好的,以下是一个简单的C语言程序,可以实现你所需要的功能:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* createList(int num);
void printList(Node* head);
void reverseList(Node** head);
int main() {
int num;
printf("请输入要输入的数字个数:");
scanf("%d", &num);
Node* head = createList(num);
printf("原始链表:");
printList(head);
reverseList(&head);
printf("逆序输出:");
printList(head);
return 0;
}
Node* createList(int num) {
Node* head = NULL;
Node* p = NULL;
int data;
for (int i = 1; i <= num; i++) {
printf("请输入第%d个数字:", i);
scanf("%d", &data);
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
p = head;
} else {
p->next = newNode;
p = p->next;
}
}
return head;
}
void printList(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void reverseList(Node** head) {
Node* p = *head;
Node* q = NULL;
Node* r = NULL;
while (p != NULL) {
r = q;
q = p;
p = p->next;
q->next = r;
}
*head = q;
}
```
程序流程如下:
1. 输入数字个数;
2. 通过 `createList()` 函数创建链表;
3. 通过 `printList()` 函数打印原始链表;
4. 通过 `reverseList()` 函数逆序链表;
5. 通过 `printList()` 函数打印逆序输出的链表。
在 `createList()` 函数中,我们使用了一个 `Node` 结构体来表示链表中的节点,其中包含了节点的数据以及指向下一个节点的指针。在循环中,我们要求用户输入每个数字,并将其添加到链表中。如果链表为空,则新建一个节点作为链表头;否则,将新建的节点添加到链表尾部。
在 `printList()` 函数中,我们遍历链表并打印每个节点的数据。
在 `reverseList()` 函数中,我们使用了三个指针 `p`,`q` 和 `r`。`p` 和 `q` 分别指向当前节点和其前一个节点,`r` 则指向 `q` 的前一个节点。在循环中,我们依次将每个节点的 `next` 指针指向其前一个节点,最终将链表头指向 `q`。这样就实现了逆序输出链表的功能。
希望对你有帮助!
阅读全文