阅读量:0
C语言中单链表的反转可以通过修改指针的指向来实现。具体的方法如下:
定义三个指针:prev、curr和next。初始时,prev指向NULL,curr指向链表的头节点,next指向curr的下一个节点。
遍历链表,直到curr指向NULL为止,循环执行以下操作: a. 将next指向curr的下一个节点,以便保留链表的连接关系。 b. 将curr的next指针指向prev,即将curr的指针方向反转。 c. 将prev指向curr,以便保留反转后的链表的头节点。 d. 将curr指向next,以便继续遍历链表。
遍历结束后,prev指向反转后的链表的头节点,即完成了链表的反转。
以下是一个示例代码:
#include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode *next; }; struct ListNode* reverseList(struct ListNode* head) { struct ListNode *prev = NULL; struct ListNode *curr = head; while (curr != NULL) { struct ListNode *next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } int main() { // 创建链表 1->2->3->4->5 struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode *node2 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode *node3 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode *node4 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode *node5 = (struct ListNode *)malloc(sizeof(struct ListNode)); head->val = 1; head->next = node2; node2->val = 2; node2->next = node3; node3->val = 3; node3->next = node4; node4->val = 4; node4->next = node5; node5->val = 5; node5->next = NULL; // 反转链表 struct ListNode *newHead = reverseList(head); // 遍历打印反转后的链表 struct ListNode *current = newHead; while (current != NULL) { printf("%d ", current->val); current = current->next; } return 0; }
运行以上代码,输出结果为:5 4 3 2 1,即链表反转成功。