用c代码写程序,实现单链表反转并注释解析
时间: 2023-05-22 20:01:12 浏览: 62
当然可以,以下是C语言实现单链表反转的代码,并附有注释解析:
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data; // 数据域
struct Node* next; // 指针域,指向下一个节点
};
// 定义链表反转函数
struct Node* reverseList(struct Node* head) {
struct Node* prev = NULL; // 定义前驱节点指针
struct Node* curr = head; // 定义当前节点指针
struct Node* next = NULL; // 定义后继节点指针
while (curr != NULL) { // 遍历链表
next = curr->next; // 先保存当前节点的后继节点
curr->next = prev; // 将当前节点的指针指向前驱节点,实现反转
prev = curr; // 更新前驱节点指针
curr = next; // 更新当前节点指针
}
return prev; // 返回反转后的链表头节点
}
int main() {
// 创建链表
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
struct Node* node1 = (struct Node*)malloc(sizeof(struct Node));
node1->data = 2;
struct Node* node2 = (struct Node*)malloc(sizeof(struct Node));
node2->data = 3;
head->next = node1;
node1->next = node2;
node2->next = NULL;
// 输出原链表
printf("Original List: ");
struct Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
// 反转链表
head = reverseList(head);
// 输出反转后的链表
printf("Reversed List: ");
curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
return 0;
}
```
注释解析:
1. 定义了一个链表节点结构体,包含数据域和指针域;
2. 定义了一个链表反转函数,使用三个指针分别指向前驱节点、当前节点和后继节点,遍历链表并实现反转;
3. 在主函数中创建了一个包含三个节点的链表,并输出原链表;
4. 调用链表反转函数,得到反转后的链表,并输出。