动态 版块 发帖 消息 我的
小绿叶技术博客
小绿叶技术博客
小绿叶技术Lv154   
c++ 链表     



#include <iostream>

struct ListNode {               // 链表通过节点实现,节点包含:数据和指向下一个节点的指针
    int parameter;              // 节点存储的数据               【属性1】
    ListNode *next;             // 链表桥接:链表类型被指针继承   【属性2】
    ListNode(int x) : parameter(x), next(nullptr) {}
                                //  声明构造函: 与结构体名称相同 ListNode(int x)  传入的参数 是 int 整形
                                //  初始化构造函数: 接收 x 参数来初始化本身
                                //  链表桥接:next(nullptr)    内置函数 nullptr  空0 表示没有后续节点,不需要桥接
};

// 函数用于反转链表
ListNode* reverseList(ListNode* head) {
                                // ListNode* head 链表 接头点; 函数结构体:需要对结构体表 ListNode 进行操作的函数

    ListNode *prev = nullptr;   // prev 指针继承结构体:指向 结构体的指针  为空: 跟踪【反转】链表过程中的前一个节点
    ListNode *current = head;   // 指针继承结构体:     表的头节点,遍历链表
    ListNode *next = nullptr;   // 临时存储下一个节点

    while (current != nullptr) {
                                // 如果main() 函数传来的 head 不是空的,进入循环

        next = current->next;   // 本函数指针next = 原结构体 (current = ListNode) 中的 ListNode.next 成员

        current->next = prev;   // 原结构体表结尾 = 本函数 表接头 :  原结构体 ListNode.next 成员 =  本函数指针 prev ;    反转当前节点的指针

        prev = current;         // 移动prev指针: prev 获取数据
        current = next;         // 移动current指针
    }
    // 当前头节点已经是链表的最后一个节点,反转后它将成为新的头节点
    head = prev;

    return head;
}

// 辅助函数:打印链表
void printList(ListNode *node) {
    while (node != nullptr) {
        std::cout << node->parameter << " ";
        node = node->next;
    }
    std::cout << "nullptr" << std::endl; // 打印链表结束标记
}

// 辅助函数:清理分配的内存
void cleanList(ListNode *&head) {
    ListNode *current = head;
    while (current != nullptr) {
        ListNode *temp = current;
        current = current->next;
        delete temp;
    }
    head = nullptr;
}

int main() {
    // 创建链表:1 -> 2 -> 3 -> nullptr
    ListNode *head = new ListNode(1);
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);

    // 打印原始链表
    std::cout << "Original list: ";
    printList(head);

    // 反转链表
    head = reverseList(head);

    // 打印反转后的链表
    std::cout << "Reversed list: ";
    printList(head);

    // 清理分配的内存
    cleanList(head);

    return 0;
}



 0  已被阅读了242次  楼主 2024-03-26 10:08:26
回复列表
admin
2F
小绿叶技术Lv154   
Chinese Square Head Videos
 0   25天前  回复

回复:c++ 链表

guest
登录之后更精彩~
Powered by HadSky 7.12.10
© 2015-2024 PuYueTian
您的IP:44.200.86.95,2024-05-30 04:27:37,Processed in 0.0204 second(s).
Powered by HadSky
小绿叶技术博客