1.图书整理 I
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int data; // 节点的数据
struct ListNode* next; // 指向下一个节点的指针
};
// 创建链表节点
struct ListNode* createNode(int data) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode)); // 分配内存给新节点
node->data = data; // 设置节点的数据
node->next = NULL; // 设置下一个节点指针为 NULL
return node; // 返回创建的节点
}
// 打印链表
void printList(struct ListNode* head) {
struct ListNode* current = head; // 初始化当前节点为头节点
while (current!= NULL) { // 当当前节点不为空时
printf("%d -> ", current->data); // 打印当前节点的数据,并添加 " -> "
current = current->next; // 移动到下一个节点
}
printf("NULL\n"); // 打印链表结束标志
}
// 反转链表
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* prev = NULL; // 初始化前一个节点为 NULL
struct ListNode* current = head; // 初始化当前节点为头节点
struct ListNode* next; // 保存下一个节点的指针
while (current!= NULL) { // 当当前节点不为空时
next = current->next; // 保存下一个节点的指针
current->next = prev; // 将当前节点的下一个节点指针指向前一个节点
prev = current; // 更新前一个节点为当前节点
current = next; // 更新当前节点为下一个节点
}
return prev; // 返回反转后的头节点
}
int main() {
// 创建链表
struct ListNode* head = createNode(3); // 创建头节点,数据为 3
head->next = createNode(6); // 设置头节点的下一个节点,数据为 6
head->next->next = createNode(4); // 设置下一个节点的下一个节点,数据为 4
head->next->next->next = createNode(1); // 设置最后一个节点,数据为 1
// 打印原始链表
printf("原始链表:"); // 输出提示信息
printList(head); // 打印原始链表
// 反转链表
struct ListNode* reversedHead = reverseList(head); // 反转链表
// 打印反转后的链表
printf("反转后的链表:"); // 输出提示信息
printList(reversedHead); // 打印反转后的链表
return 0; // 程序正常结束
}