结构体反转单链表C语言
时间: 2024-04-20 22:20:14 浏览: 13
在C语言中,可以使用结构体和指针来实现单链表的反转。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 反转单链表函数
struct Node* reverseLinkedList(struct Node* head) {
struct Node* prev = NULL;
struct Node* current = head;
struct Node* next = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
return prev;
}
// 打印链表函数
void printLinkedList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
// 创建链表节点
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
struct Node* second = (struct Node*)malloc(sizeof(struct Node));
struct Node* third = (struct Node*)malloc(sizeof(struct Node));
// 设置链表节点的值和指针
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
printf("原始链表:");
printLinkedList(head);
// 反转链表
head = reverseLinkedList(head);
printf("反转后的链表:");
printLinkedList(head);
// 释放内存
free(head);
free(second);
free(third);
return 0;
}
```
这段代码中,我们首先定义了一个结构体`Node`,用于表示链表的节点。每个节点包含一个整数类型的数据和一个指向下一个节点的指针。
然后,我们定义了一个`reverseLinkedList`函数,用于反转单链表。该函数使用三个指针变量`prev`、`current`和`next`,分别表示当前节点、前一个节点和下一个节点。通过遍历链表,将当前节点的指针指向前一个节点,实现链表的反转。
最后,在`main`函数中,我们创建了一个简单的链表,并调用`reverseLinkedList`函数进行反转。然后,通过调用`printLinkedList`函数打印出反转后的链表。