编程实现对一个单向链表的结点进行反转,也就是将链表结点按逆序排列,排序后链头将成为链尾,而链尾将成为链头。自定义函数名称及函数功能要求如下: (1)定义“createNode”函数,实现创建一个新结点。 (2)定义“createList”函数,实现一个单向链表的创建。 ● 在创建结点时通过键盘输入为每个结点的数据成员value进行赋值。 ● 使用“头插法”将每个结点逐一插入到链表中。 (3)定义“display”的函数,实现对链表所有结点的遍历输出。 (4)定义“reverse”的函数,实现对链表结点的反转c语言
时间: 2023-12-10 16:37:31 浏览: 58
实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点结构体
typedef struct Node {
int value;
struct Node* next;
} Node;
// 创建新结点
Node* createNode(int value) {
Node* newNode = (Node*) malloc(sizeof(Node));
newNode->value = value;
newNode->next = NULL;
return newNode;
}
// 创建链表
Node* createList() {
Node* head = NULL;
Node* tail = NULL;
int value;
printf("请输入链表结点的值,输入-1结束:\n");
scanf("%d", &value);
while (value != -1) {
Node* newNode = createNode(value);
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
newNode->next = head;
head = newNode;
}
scanf("%d", &value);
}
return head;
}
// 遍历输出链表
void display(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->value);
current = current->next;
}
printf("\n");
}
// 反转链表
Node* reverse(Node* head) {
Node* prev = NULL;
Node* current = head;
Node* next = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
return prev;
}
// 主函数
int main() {
Node* head = createList();
printf("原链表:");
display(head);
head = reverse(head);
printf("反转后链表:");
display(head);
return 0;
}
```
运行结果:
```
请输入链表结点的值,输入-1结束:
1
2
3
4
5
-1
原链表:5 4 3 2 1
反转后链表:1 2 3 4 5
```
阅读全文