c语言设计一个算法,将一个单链表L(至少含两个数据结点)中所有结点逆置,并用相关数据进行测试。
时间: 2024-09-25 07:06:09 浏览: 28
在 C 语言中,我们可以使用迭代或递归的方式来实现链表的逆置。这里是一个使用迭代方法的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点函数
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 逆置链表函数
void reverseList(Node** head) {
Node* prev = NULL;
Node* current = *head;
Node* temp = NULL;
while (current != NULL) {
// 保存当前节点的下一个节点
temp = current->next;
// 将当前节点指向前一个节点
current->next = prev;
// 更新前一个节点和当前节点
prev = current;
current = temp;
}
// 设置新的头节点为原头节点的最后一个元素
*head = prev;
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
// 测试数据
Node* list[] = {createNode(1), createNode(2), createNode(3), createNode(4), createNode(5)};
Node* head = list[0];
// 初始化并打印原链表
printf("Original List:\n");
printList(head);
// 逆置链表
reverseList(&head);
// 打印逆置后的链表
printf("\nReversed List:\n");
printList(head);
return 0;
}
```
在这个例子中,我们首先创建了一个包含五个节点的链表,然后调用 `reverseList` 函数将其逆置。最后,我们打印出原始链表和逆置后的链表。
阅读全文