数据结构C语言编写一个算法实现,单链表的倒序,使用头插法,空间复杂度为O(n)
时间: 2024-09-23 18:03:47 浏览: 49
在C语言中,我们可以使用单链表的头插法(即每次插入新节点到链表头部)来实现链表的倒序。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int data; // 节点数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 创建一个新的链表节点
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 链表倒序函数
void reverseList(ListNode** headRef) {
ListNode* prev = NULL;
ListNode* current = *headRef;
ListNode* nextTemp;
while (current != NULL) {
// 保存当前节点的下一个节点
nextTemp = current->next;
// 将当前节点指向prev节点
current->next = prev;
// 更新prev和current
prev = current;
current = nextTemp;
}
*headRef = prev; // 新的头节点是原链表的最后一个节点
}
// 打印链表
void printList(ListNode* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
// 初始化一个链表(假设这里已经创建了)
ListNode* head = ...;
// 倒序操作
reverseList(&head);
// 打印倒序后的链表
printf("Reversed list: ");
printList(head);
return 0;
}
```
在这个代码中,`reverseList`函数通过临时变量`nextTemp`来保存每个节点的下一个节点,并将当前节点的`next`指向前一个节点,直到遍历完整个链表。最后,链表的头节点变为原来的尾节点。
阅读全文