用C语言设计一个算法,利用单链表原来的结点空间逆转一个单链表
时间: 2024-05-12 09:12:56 浏览: 108
可以使用三个指针prev, current和next,分别指向当前节点的前一个节点、当前节点和下一个节点,然后依次遍历单链表,将每个节点的指针指向前一个节点,最后返回新的头节点即可。
以下是C语言的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点
struct Node {
int data;
struct Node* next;
};
// 反转单链表
struct Node* reverseLinkedList(struct Node* head) {
struct Node *prev, *current, *next;
prev = NULL;
current = head;
while (current != NULL) {
next = current->next; // 保存下一个节点
current->next = prev; // 当前节点指向前一个节点
prev = current; // 前一个节点更新为当前节点
current = next; // 当前节点更新为下一个节点
}
return prev; // 新的头节点为原来的尾节点
}
// 打印单链表
void printLinkedList(struct Node* head) {
struct Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
// 创建单链表
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
head->next = (struct Node*)malloc(sizeof(struct Node));
head->next->data = 2;
head->next->next = (struct Node*)malloc(sizeof(struct Node));
head->next->next->data = 3;
head->next->next->next = NULL;
// 打印原来的单链表
printf("Original linked list: ");
printLinkedList(head);
// 反转单链表
head = reverseLinkedList(head);
// 打印反转后的单链表
printf("Reversed linked list: ");
printLinkedList(head);
return 0;
}
```
运行结果:
```
Original linked list: 1 2 3
Reversed linked list: 3 2 1
```
阅读全文