C++ 单链表就地逆置算法详解:实现高效的链表反转

问题描述:

给定一个带头结点的单链表,要求实现一个函数,将该链表就地(不增加额外结点)逆置。

函数接口定义:

void reverseList(LinkList La);

其中参数 La 是待逆置的链表,头指针为 head,指针域为 next。

思路:

  1. 首先判断链表是否为空,如果为空则直接返回。
  2. 定义三个指针变量 prev、curr 和 next,分别指向前一个结点、当前结点和下一个结点。
  3. 将 curr 指向头结点的下一个结点,prev 指向头结点,next 指向 curr 的下一个结点。
  4. 进入循环,将 curr 的指针域指向 prev,然后将 prev、curr 和 next 依次向后移动一位。
  5. 循环结束后,将头结点的指针域指向 prev,完成链表的逆置。

实现代码:

void reverseList(LinkList La) {
    if (La.head->next == NULL) {
        return;
    }
    LNode* prev = La.head;
    LNode* curr = La.head->next;
    LNode* next = curr->next;
    curr->next = NULL;
    while (next != NULL) {
        prev = curr;
        curr = next;
        next = curr->next;
        curr->next = prev;
    }
    La.head->next = curr;
}

代码解析:

  1. 首先判断链表是否为空,如果为空则直接返回。
  2. 定义三个指针变量 prev、curr 和 next,分别指向前一个结点、当前结点和下一个结点。
  3. 将 curr 指向头结点的下一个结点,prev 指向头结点,next 指向 curr 的下一个结点。
  4. 进入循环,将 curr 的指针域指向 prev,然后将 prev、curr 和 next 依次向后移动一位。
  5. 循环结束后,将头结点的指针域指向 prev,完成链表的逆置。

举例:

假设链表的初始状态为: 1 -> 2 -> 3 -> 4 -> NULL

则经过逆置后的链表状态为: 4 -> 3 -> 2 -> 1 -> NULL

总结:

该算法通过巧妙的指针操作,将链表元素顺序反转,实现了单链表的就地逆置,无需额外空间,提高了算法的效率。

C++ 单链表就地逆置算法详解:实现高效的链表反转

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

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