逆置链表是指将一个链表中的元素顺序颠倒过来,下面是一个详细的步骤,使用C语言实现逆置链表:
(图片来源网络,侵删)
1、定义链表节点结构体:
struct ListNode { int val; // 节点的值 struct ListNode *next; // 指向下一个节点的指针 };
2、创建一个新的空链表头节点:
struct ListNode* reverseList(struct ListNode* head) { // 创建一个新的空链表头节点 struct ListNode* newHead = NULL; // ... }
3、遍历原链表,将每个节点插入到新链表的头部:
struct ListNode* reverseList(struct ListNode* head) { // 创建一个新的空链表头节点 struct ListNode* newHead = NULL; // 遍历原链表,将每个节点插入到新链表的头部 while (head != NULL) { // 保存当前节点的下一个节点指针 struct ListNode* next = head>next; // 将当前节点插入到新链表的头部 head>next = newHead; // 更新新链表头节点为当前节点 newHead = head; // 移动到下一个节点 head = next; } // 返回新链表的头节点 return newHead; }
4、完整代码示例:
#include <stdio.h> #include <stdlib.h> struct ListNode { int val; // 节点的值 struct ListNode *next; // 指向下一个节点的指针 }; // 创建新的节点并初始化值和指针域为NULL struct ListNode* createNode(int val) { struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); newNode>val = val; newNode>next = NULL; return newNode; } // 逆置链表函数实现 struct ListNode* reverseList(struct ListNode* head) { // 创建一个新的空链表头节点 struct ListNode* newHead = NULL; // 遍历原链表,将每个节点插入到新链表的头部 while (head != NULL) { // 保存当前节点的下一个节点指针 struct ListNode* next = head>next; // 将当前节点插入到新链表的头部 head>next = newHead; // 更新新链表头节点为当前节点 newHead = head; // 移动到下一个节点 head = next; } // 返回新链表的头节点 return newHead; } // 打印链表函数实现(用于测试) void printList(struct ListNode* head) { struct ListNode* current = head; while (current != NULL) { printf("%d ", current>val); // 打印当前节点的值 current = current>next; // 移动到下一个节点 } printf(" "); // 换行符,使输出更清晰可读 } int main() { // 创建一个包含5个节点的链表:1 > 2 > 3 > 4 > 5 > NULL struct ListNode* head = createNode(1); // 创建头节点并赋值为1,指针域为NULL(初始时) head>next = createNode(2); // 创建第二个节点并赋值为2,指针域指向头节点(初始时) head>next>next = createNode(3); // 创建第三个节点并赋值为3,指针域指向第二个节点(初始时)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)