有一线性表的单链表表示为(al,a2,a3,⋯••an)设计算法将单链表 逆置(an,an-l,an-2, ...al)用c语言写出来
时间: 2024-09-23 14:17:02 浏览: 64
在C语言中,可以采用迭代的方式来实现单链表的逆置。下面是一个简单的示例,定义了一个`ListNode`结构用于表示链表节点,以及一个辅助函数`swapNodes`用于交换两个节点的位置:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 辅助函数:交换两个节点
void swapNodes(ListNode** a, ListNode** b) {
ListNode* temp = *a;
*a = *b;
*b = temp;
}
// 链表逆置函数
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* current = head;
ListNode* nextTemp;
// 当前节点不为空时,继续遍历
while (current != NULL) {
// 记录当前节点的下一个节点
nextTemp = current->next;
// 将当前节点的next指向前一个节点
current->next = prev;
// 更新前一个节点和当前位置
prev = current;
current = nextTemp;
}
return prev; // 返回新的头节点
}
// 打印链表
void printList(ListNode* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
// 创建测试链表
ListNode* list = (ListNode*)malloc(sizeof(ListNode));
list->data = 1;
list->next = (ListNode*)malloc(sizeof(ListNode));
list->next->data = 2;
list->next->next = (ListNode*)malloc(sizeof(ListNode));
list->next->next->data = 3;
// 打印原链表
printf("Original List: ");
printList(list);
// 逆置链表
list = reverseList(list);
// 打印逆置后的链表
printf("Reversed List: ");
printList(list);
return 0;
}
```
运行这个程序,你会看到原始链表和逆置后的链表。注意,这个函数会改变输入链表本身,不会创建一个新的链表。如果你不想改变原始链表,可以在`reverseList`函数内部复制链表。
阅读全文