收藏文章 楼主

c++ 链表

版块:C/C++语言开发   类型:普通   作者:小绿叶技术博客   查看:772   回复:1   获赞:0   时间:2024-03-26 10:08:26



#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;
}



有些梦虽然遥不可及,但并不是不可能实现。 
回复列表
默认   热门   正序   倒序

回复:c++ 链表

Powered by ddoss.cn 12.0

©2015 - 2024 ddoss

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息