设计算法实现单链表中的数据逆置操作,用c语言编码
时间: 2024-09-19 09:02:31 浏览: 45
在C语言中,可以使用迭代或递归的方式来实现单链表的数据逆置。这里给出一种迭代的解法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 函数声明
void reverseList(Node** head);
// 反转链表函数
void reverseList(Node** head) {
Node* prev = NULL; // 初始化前驱节点为NULL
Node* current = *head; // 初始化当前节点为头节点
Node* nextTemp; // 临时保存下一个节点
// 当链表非空时,继续循环
while (current != NULL) {
// 交换当前节点和前驱节点的next指针
nextTemp = current->next;
current->next = prev;
// 移动前驱和当前节点到下一轮
prev = current;
current = nextTemp;
}
// 更新头节点为新的头节点,即原来的尾节点
*head = prev;
}
// 测试函数
int main() {
Node* head = createLinkedList(); // 创建测试链表
printf("Original List:\n");
printList(head); // 打印原链表
reverseList(&head); // 调用逆置函数
printf("\nReversed List:\n");
printList(head); // 打印逆置后的链表
return 0;
}
// 其他辅助函数,如创建链表、打印链表等,此处省略
```
这个`reverseList`函数通过改变每个节点的`next`指针,实现了对整个链表的逆序。当遍历到链表末尾时,`prev`成为新的头节点,`current`变为NULL,结束循环。
阅读全文