下面是使用 C++ 语言实现头插法创建循环双链表的代码:

#include <iostream>

using namespace std;

struct Node {
    int data;
    Node* prev;
    Node* next;
};

Node* createNode(int data) {
    Node* newNode = new Node();
    newNode->data = data;
    newNode->prev = NULL;
    newNode->next = NULL;
    return newNode;
}

void insertAtHead(Node** head, int data) {
    Node* newNode = createNode(data);
    if (*head == NULL) {
        newNode->next = newNode;
        newNode->prev = newNode;
    } else {
        newNode->next = *head;
        newNode->prev = (*head)->prev;
        (*head)->prev->next = newNode;
        (*head)->prev = newNode;
    }
    *head = newNode;
}

void displayList(Node* head) {
    Node* temp = head;
    do {
        cout << temp->data << ' ';
        temp = temp->next;
    } while (temp != head);
}

int main() {
    Node* head = NULL;
    insertAtHead(&head, 4);
    insertAtHead(&head, 3);
    insertAtHead(&head, 2);
    insertAtHead(&head, 1);
    displayList(head);

    return 0;
}

这段代码首先定义了一个'Node'结构体,用于表示链表的节点。然后定义了一个'createNode'函数,用于创建一个包含给定数据的新节点。接下来,定义了一个'insertAtHead'函数,用于将新节点插入到链表的头部。在这个函数中,首先创建一个新节点,并根据链表是否为空来设置节点的'prev'和'next'指针。如果链表为空,那么新节点的'prev'和'next'指针都指向节点本身;如果链表不为空,那么将新节点的'next'指向原头节点,将新节点的'prev'指向原头节点的前一个节点,同时将原头节点的前一个节点的'next'指向新节点,将原头节点的'prev'指向新节点。最后,将头指针指向新节点。最后,定义了一个'displayList'函数,用于打印链表中的所有节点的数据。在'main'函数中,首先创建了一个空链表,然后依次使用头插法插入4个节点,并调用'displayList'函数打印链表中的所有节点的数据。

C++ 循环双链表:头插法实现

原文地址: http://www.cveoy.top/t/topic/bzk3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录