C语言链表反转函数解析:struct ListNode *reverse(struct ListNode *head)

该函数用于将单链表反转,函数参数为链表的头节点指针head,返回反转后的链表的头节点指针。

struct ListNode *reverse(struct ListNode *head) {
    // 创建两个指针,prev指向前一个节点,curr指向当前节点
    struct ListNode *prev = NULL;
    struct ListNode *curr = head;
    
    // 循环遍历链表,直到curr指向最后一个节点
    while (curr != NULL) {
        // 创建一个指针next,指向当前节点的下一个节点
        struct ListNode *next = curr->next;
        
        // 将当前节点的next指针指向前一个节点,实现反转
        curr->next = prev;
        
        // 更新prev和curr指针,分别指向当前节点和下一个节点
        prev = curr;
        curr = next;
    }
    
    // 返回反转后的链表的头节点
    return prev;
}

代码解析

  1. 创建指针: 首先创建两个指针prevcurr,分别指向链表的前一个节点和当前节点。初始情况下,prevNULLcurr指向链表头节点。

  2. 循环遍历: 使用while循环遍历链表,直到curr指向链表的最后一个节点(即currNULL)。

  3. 创建next指针: 在循环内部,创建指针next,指向当前节点curr的下一个节点,用于保存后续节点的信息。

  4. 反转操作: 将当前节点currnext指针指向前一个节点prev,实现反转操作。

  5. 更新指针: 更新prevcurr指针,分别指向当前节点curr和下一个节点next,以便进行下一轮循环。

  6. 返回头节点: 循环结束后,prev指针指向反转后的链表的头节点,因此返回prev

总结

通过逐个节点反转next指针指向,将链表的顺序反转。该方法简单易懂,效率较高,是常用的链表反转方法之一。

C语言链表反转函数解析:struct ListNode *reverse(struct ListNode *head)

原文地址: https://www.cveoy.top/t/topic/f2q2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录