温馨提示×

c++ listnode如何实现双向链表

c++
小樊
83
2024-07-24 14:26:16
栏目: 编程语言

在C++中实现双向链表可以通过定义一个ListNode结构体来实现,该结构体包含三个成员变量:值val、指向下一个节点的指针next和指向前一个节点的指针prev。

以下是一个简单的双向链表的实现示例:

#include <iostream>

struct ListNode {
    int val;
    ListNode* next;
    ListNode* prev;
    ListNode(int x) : val(x), next(nullptr), prev(nullptr) {}
};

class DoubleLinkedList {
private:
    ListNode* head;
    ListNode* tail;

public:
    DoubleLinkedList() : head(nullptr), tail(nullptr) {}

    void insertAtHead(int val) {
        ListNode* newNode = new ListNode(val);
        if (head == nullptr) {
            head = newNode;
            tail = newNode;
        } else {
            newNode->next = head;
            head->prev = newNode;
            head = newNode;
        }
    }

    void insertAtTail(int val) {
        ListNode* newNode = new ListNode(val);
        if (tail == nullptr) {
            head = newNode;
            tail = newNode;
        } else {
            newNode->prev = tail;
            tail->next = newNode;
            tail = newNode;
        }
    }

    void printList() {
        ListNode* current = head;
        while (current != nullptr) {
            std::cout << current->val << " ";
            current = current->next;
        }
        std::cout << std::endl;
    }
};

int main() {
    DoubleLinkedList dl;
    dl.insertAtHead(1);
    dl.insertAtTail(2);
    dl.insertAtTail(3);

    dl.printList();

    return 0;
}

在上面的示例中,定义了一个DoubleLinkedList类来实现双向链表的基本操作,包括在链表头部插入节点和在链表尾部插入节点。通过调用insertAtHead和insertAtTail方法可以向双向链表中插入节点,然后通过printList方法打印出整个链表的值。

0