已知一个单链表如图1所示,编写一个函数将该单链表逆置。C语言
时间: 2024-09-30 12:05:55 浏览: 25
在C语言中,我们可以使用迭代或递归的方式来反转一个单链表。这里我提供一种常见的迭代方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* newNode(int data) {
Node* node = (Node*)malloc(sizeof(Node));
if (node != NULL) {
node->data = data;
node->next = NULL;
}
return node;
}
// 逆置链表的函数
Node* reverseList(Node* head) {
Node* prev = NULL; // 指向当前节点的前一个节点
Node* current = head; // 初始化当前节点
while (current != NULL) { // 当有节点时
Node* temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // 更新前一个节点为当前节点
current = temp; // 更新当前节点为之前保存的下一个节点
}
return prev; // 返回新的头节点,即原链表的尾部
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 示例链表:1 -> 2 -> 3 -> 4 -> 5
Node* head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next = newNode(4);
head->next->next->next->next = newNode(5);
printf("Original list:\n");
printList(head);
head = reverseList(head); // 反转链表
printf("\nReversed list:\n");
printList(head);
return 0;
}
```
当你运行这个程序时,它会先打印出原始链表,然后逆置后打印出新的链表。
阅读全文