循环双向链表
DoubleLinkedList.h
#pragma once
#include <iostream>
using namespace std;
class CList {
public:
CList();
~CList();
public:
int Data;
CList *Next;
CList *Forward;
};
class CDoubleLinkedList
{
public:
CList *head;
CList *end;
public:
CDoubleLinkedList();
~CDoubleLinkedList();
public:
void Insert(CList*&,int);
void Delete(CList*&,int);
void Change(CList*,int,int);
public:
void DisPlay(CList*);
void DeleteAll(CList*&);
};
DoubleLinkedList.cpp
#include "DoubleLinkedList.h"
CDoubleLinkedList::CDoubleLinkedList()
{
head = new CList;
end = new CList;
head->Forward = end;
head->Next = end;
end->Next = head;
end->Forward = end;
}
CDoubleLinkedList::~CDoubleLinkedList()
{
DeleteAll(head);
}
void CDoubleLinkedList::Insert(CList *&node, int data)
{
if (node->Next == end)
{
CList *newNode = new CList;
newNode->Data = data;
newNode->Forward = node;
newNode->Next = end;
end->Forward = newNode;
node->Next = newNode;
return;
}
Insert(node->Next,data);
}
void CDoubleLinkedList::Delete(CList *&node, int data)
{
if (node == end)
{
return;
}
while (node->Data == data)
{
CList *tempNode = node;
node = node->Next;
node->Forward = tempNode->Forward;
delete tempNode;
tempNode = nullptr;
if (node == end)
{
return;
}
}
Delete(node->Next,data);
}
void CDoubleLinkedList::Change(CList *node, int oldData,int newData)
{
if (node == head)
{
return;
}
if (node->Data == oldData)
{
node->Data = newData;
}
Change(node->Forward,oldData,newData);
}
void CDoubleLinkedList::DisPlay(CList *node)
{
static int index = 0;
if (node == head)
{
return;
}
cout << "第" << index++ << "个数据为" << node->Data << endl;
DisPlay(node->Forward);
}
void CDoubleLinkedList::DeleteAll(CList *&node)
{
if (node == end)
{
return;
}
DeleteAll(node->Next);
delete node;
node = nullptr;
}
main.cpp
void main()
{
CDoubleLinkedList dll;
for (int index = 0; index < 10; index++)
{
dll.Insert(dll.head, index);
}
dll.Delete(dll.head,2);
dll.Change(dll.end, 4, 99);
dll.DisPlay(dll.end);
system("pause");
}