C++ 循环双链表:头插法实现
下面是使用 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'函数打印链表中的所有节点的数据。
原文地址: http://www.cveoy.top/t/topic/bzk3 著作权归作者所有。请勿转载和采集!