用c语言写出将链表逆置的算法:给定一个带头结点的链表L,每个结点数据成员包括int data,Lnode *next
时间: 2024-10-13 15:15:51 浏览: 37
8581 线性链表逆置
在C语言中,你可以使用迭代法来实现链表的逆置,这种方法通过三个指针`prev`, `current`, 和 `next` 来遍历并交换节点的位置。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 函数声明
ListNode* reverseList(ListNode* head);
// 反转链表函数
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL; // 初始化前驱节点为空
ListNode* current = head; // 当前节点指向头节点
ListNode* next暂存当前节点的下一个节点
while (current != NULL) { // 遍历链表直到结束
next = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // 更新前驱节点为当前节点
current = next; // 移动到下一个节点
}
return prev; // 返回新的头节点,即原链表的尾节点
}
// 测试反转操作
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 创建测试链表
ListNode* list = malloc(sizeof(ListNode));
list->data = 1;
list->next = malloc(sizeof(ListNode));
list->next->data = 2;
list->next->next = malloc(sizeof(ListNode));
list->next->next->data = 3;
list->next->next->next = NULL;
printf("Original List:\n");
printList(list);
list = reverseList(list); // 反转链表
printf("\nReversed List:\n");
printList(list);
return 0;
}
```
阅读全文