/* * @Author: Student author@example.com * @Date: 2025-01-01 16:31:26 * @LastEditors: Student author@example.com * @LastEditTime: 2025-01-01 17:20:53 * @FilePath: \LibraryManageSystem\include\STL\LinkList.h * @Description: Coding with UTF-8 * * Copyright (c) 2025 by Student, All Rights Reserved. */ #ifndef LINKLIST_H #define LINKLIST_H #include #include #include // 为了使用 intptr_t class ListNode { public: intptr_t data; // 数据域 ListNode *next; // 指针域 /** * @brief 构造函数 * @param value 节点数据值 */ explicit ListNode(intptr_t value = 0) : data(value), next(nullptr) {} }; class LinkList { public: // 构造函数和析构函数 LinkList(); // 构造函数 LinkList(const LinkList &other); // 拷贝构造函数 ~LinkList(); // 析构函数 // 赋值运算符 LinkList &operator=(const LinkList &other); // 基本信息查询 bool isEmpty() const { return len == 0; } // 判断是否为空 int length() const { return len; } // 获取长度 // 节点操作 void addNodeToFront(int x); // 在链表头部插入数据 void addNodeToEnd(intptr_t x); // 在链表尾部插入数据 void insertNode(int i, int item); // 在指定位置插入数据 void deleteNode(int i); // 删除指定位置的节点 // 查找操作 ListNode *getPointer(int i); // 获取指定位置的节点指针 const ListNode *getPointer(int i) const; // 获取指定位置的节点指针(const版本) int findValue(int value) const; // 查找指定值的位置 void getData(int i) const; // 打印指定位置的数据 // 显示操作 void displayAllNodes() const; // 打印所有节点 // 排序和交换操作 void sortForLinkList(); // 链表排序 void swapNodes(int pa, int pb); // 交换两个节点 // 其他操作 LinkList mergeLinkLists(LinkList &La, LinkList &Lb); // 合并两个链表 void clear(); // 清空链表 private: ListNode *head; // 头节点指针 int len; // 链表长度 // 辅助方法 void quickSort(int left, int right); // 快速排序实现 void copyFrom(const LinkList &other); // 复制辅助函数 friend class Book; // Add these lines friend class Member; }; #endif // LINKLIST_H