用C语言写下列程序:将一个链表按逆序排列,即将链头当链尾,链尾当链头。 **输入提示:"\n请输入链表(非数表示结束)\n" **输入提示:"结点值:" **输出提示:"\n原来表:\n" **输出格式:"%4d" **输出提示:"\n\n反转表:\n" **输出格式:"%4d" 程序的运行示例如下: 请输入链表(非数表示结束) 结点值:3 结点值:4 结点值:5 结点值:6 结点值:7 结点值:end 原来表: 3 4 5 6 7 反转表: 7 6 5 4 3
时间: 2024-02-22 10:55:33 浏览: 345
以下是用C语言编写的程序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int val;
struct Node *next;
} Node;
Node *createList() {
Node *head = NULL;
Node *current = NULL;
Node *prev = NULL;
int num;
printf("\n请输入链表(非数表示结束)\n");
while (scanf("%d", &num) == 1) {
current = (Node *) malloc(sizeof(Node));
current->val = num;
current->next = NULL;
if (!head) {
head = current;
} else {
prev->next = current;
}
prev = current;
}
return head;
}
void printList(Node *head) {
printf("\n原来表:\n");
while (head) {
printf("%4d", head->val);
head = head->next;
}
}
void reverseList(Node **head) {
Node *prev = NULL;
Node *current = *head;
Node *next = NULL;
while (current) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
*head = prev;
}
void printReverseList(Node *head) {
printf("\n\n反转表:\n");
while (head) {
printf("%4d", head->val);
head = head->next;
}
}
int main() {
Node *head = createList();
printList(head);
reverseList(&head);
printReverseList(head);
return 0;
}
```
程序思路:
1. 定义一个链表的结构体 Node,包含两个成员变量:val 和 next,其中 val 表示节点的值,next 表示下一个节点的指针。
2. 定义一个 createList 函数,用于创建链表。该函数通过不断读取用户输入的整数来构建链表,直到输入一个非数字为止(这里假设用户输入的非数字为字符串 "end")。
3. 定义一个 printList 函数,用于输出原始的链表。
4. 定义一个 reverseList 函数,用于将链表按逆序排列。该函数使用三个指针 prev、current 和 next,分别指向前一个节点、当前节点和下一个节点。在遍历链表的过程中,将当前节点的 next 指针指向前一个节点,并更新三个指针的值,直到遍历完整个链表。
5. 定义一个 printReverseList 函数,用于输出反转后的链表。
6. 在主函数中,先创建链表,然后输出原始的链表,调用 reverseList 函数进行反转,最后输出反转后的链表。
阅读全文