编辑代码

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
struct ListNode {
    int val;
    struct ListNode *next;
};

// 迭代法逆置链表
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode *prev = NULL, *curr = head, *next_temp;
    while (curr != NULL) {
        next_temp = curr->next;  // 保存下一个节点
        curr->next = prev;       // 反转指向
        prev = curr;            // 前驱指针前移
        curr = next_temp;       // 当前指针前移
    }
    return prev; // 返回新链表的头节点
}

// 打印链表
void printList(struct ListNode* head) {
    struct ListNode* curr = head;
    while (curr != NULL) {
        printf("%d -> ", curr->val);
        curr = curr->next;
    }
    printf("NULL\n");
}

int main() {
    // 创建链表 1 -> 2 -> 3 -> 4 -> NULL
    struct ListNode n1 = {1, NULL};
    struct ListNode n2 = {2, NULL};
    struct ListNode n3 = {3, NULL};
    struct ListNode n4 = {4, NULL};
    n1.next = &n2;
    n2.next = &n3;
    n3.next = &n4;

    printf("原链表: ");
    printList(&n1);

    // 逆置链表
    struct ListNode* new_head = reverseList(&n1);

    printf("逆置后链表: ");
    printList(new_head);

    return 0;
}