用c语言,编写一个函数,反转一个线性列表
时间: 2024-11-22 16:36:31 浏览: 8
反转输出字符串-零基础学C语言第八章PPT。
在C语言中,反转一个线性列表通常使用递归或者迭代的方式。这里我将提供一个使用迭代的简单示例,它定义了一个链表节点结构体以及一个辅助函数来交换两个节点的位置。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 辅助函数,用于交换两个节点的指针
void swap(Node** a, Node** b) {
Node* temp = *a;
*a = *b;
*b = temp;
}
// 反转链表的迭代函数
Node* reverseList(Node* head) {
if (head == NULL || head->next == NULL) { // 如果链表为空或只有一个元素,直接返回
return head;
}
Node* prev = NULL; // 初始化前驱节点
Node* curr = head; // 当前节点
while (curr != NULL) {
Node* nextTemp = curr->next; // 保存当前节点的下一个节点
curr->next = prev; // 将当前节点指向前驱
prev = curr; // 更新前驱为当前节点
curr = nextTemp; // 移动到下一个节点
}
return prev; // 返回新的头节点
}
// 测试函数
int main() {
// 创建链表示例
Node* list = (Node*)malloc(sizeof(Node));
list->data = 1;
list->next = (Node*)malloc(sizeof(Node));
list->next->data = 2;
list->next->next = (Node*)malloc(sizeof(Node));
list->next->next->data = 3;
printf("Original List: ");
printList(list); // 自己实现的打印链表函数
list = reverseList(list);
printf("\nReversed List: ");
printList(list);
free(list);
return 0;
}
// 打印链表函数
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
阅读全文