117.info
人生若只如初见

C++怎么用类实现链表

要使用类实现链表,首先需要定义一个节点类来表示链表的节点,然后再定义一个链表类来操作这些节点。

以下是一个使用类实现链表的示例:

#include 

// 链表节点类
class Node {
public:
    int data;
    Node* next;
    
    Node(int value) {
        data = https://www.yisu.com/ask/value;"hljs">void append(int value) {
        Node* newNode = new Node(value);
        
        if (head == nullptr) {
            head = newNode;
        } else {
            Node* current = head;
            while (current->next != nullptr) {
                current = current->next;
            }
            current->next = newNode;
        }
    }
    
    // 在链表指定位置插入一个节点
    void insert(int value, int index) {
        if (index < 0) {
            std::cout << "Invalid index!" << std::endl;
            return;
        }
        
        Node* newNode = new Node(value);
        
        if (index == 0) {
            newNode->next = head;
            head = newNode;
        } else {
            Node* current = head;
            for (int i = 0; i < index - 1; i++) {
                if (current == nullptr) {
                    std::cout << "Invalid index!" << std::endl;
                    return;
                }
                current = current->next;
            }
            newNode->next = current->next;
            current->next = newNode;
        }
    }
    
    // 删除链表指定位置的节点
    void remove(int index) {
        if (index < 0) {
            std::cout << "Invalid index!" << std::endl;
            return;
        }
        
        if (index == 0) {
            Node* temp = head;
            head = head->next;
            delete temp;
        } else {
            Node* current = head;
            for (int i = 0; i < index - 1; i++) {
                if (current == nullptr || current->next == nullptr) {
                    std::cout << "Invalid index!" << std::endl;
                    return;
                }
                current = current->next;
            }
            Node* temp = current->next;
            current->next = temp->next;
            delete temp;
        }
    }
    
    // 打印链表中的所有节点值
    void print() {
        Node* current = head;
        while (current != nullptr) {
            std::cout << current->data << " ";
            current = current->next;
        }
        std::cout << std::endl;
    }
};

int main() {
    LinkedList myList;
    
    myList.append(1);
    myList.append(2);
    myList.append(3);
    
    myList.insert(4, 1);
    
    myList.print();  // 输出:1 4 2 3
    
    myList.remove(2);
    
    myList.print();  // 输出:1 4 3
    
    return 0;
}

在上述示例中,我们首先定义了一个节点类Node,包含一个整型数据成员data和一个指向下一个节点的指针next

然后,我们定义了一个链表类LinkedList,包含一个指向链表头部的指针head。链表类中实现了几种基本的链表操作,如在链表尾部插入节点、在指定位置插入节点、删除指定位置的节点以及打印链表中的所有节点。

main函数中,我们创建了一个链表对象myList,并进行了一些插入、删除和打印操作,最后销毁链表对象。

运行上述示例代码,将输出如下结果:

1 4 2 3
1 4 3

这表明使用类实现的链表能够正常工作。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe7b2AzsLAAJVBFw.html

推荐文章

  • C++类实例化的方法有哪些

    C++类实例化的方法共有三种: 使用new关键字:使用new关键字可以在堆上动态分配内存,并创建类的实例。示例代码如下: ClassName* obj = new ClassName(); 在栈上...

  • c#怎么获得数组长度

    在C#中,可以使用数组的Length属性来获取数组的长度。下面是一个示例:
    int[] array = { 1, 2, 3, 4, 5 };
    int length = array.Length; // 获取数组的...

  • c++宏定义的用法是什么

    C++宏定义是一种预处理指令,用于在编译之前替换代码中的文本。它可以用于定义常量、函数宏和条件编译等。以下是宏定义的几种常见用法: 定义常量:可以使用宏定...

  • c++创建对象的方法是什么

    在C++中,创建对象的方法有以下几种: 使用new关键字进行动态内存分配:
    ClassName *obj = new ClassName(); 使用自动变量进行对象的创建:
    ClassName...

  • Spark和Hadoop的应用场景有哪些

    Spark和Hadoop是两个大数据处理框架,它们都有各自的应用场景。
    Hadoop的主要应用场景包括: 批处理:Hadoop适用于处理大规模数据集的批量作业,可以在集群...

  • php中sleep函数不执行怎么解决

    如果在 PHP 中使用 sleep() 函数时没有执行,可能是以下几个原因导致的: PHP 配置文件中的 disable_functions 设置禁用了 sleep 函数。你可以检查 php.ini 文件...

  • python怎么删除文件夹下的所有文件

    你可以使用 os 模块中的 listdir 函数来获取文件夹下的所有文件名,并使用 os.remove 函数来删除每个文件。以下是一个示例代码:
    import os def delete_fil...

  • linux怎么杀死进程并重启程序

    在Linux系统中,可以使用以下命令来杀死进程并重启程序: 使用ps命令查找进程的PID(进程ID):
    ps -ef | grep 使用kill命令杀死进程:
    kill 重启程序...