#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct node
{
int date;
struct node *next;
struct node *prev;
}Node;
class DLLNode
{
private:
Node *head;
public:
DLLNode()
{
head = new Node;
head->next = nullptr;
head->prev = nullptr;
head->date = 0;
}
~DLLNode()
{
Node *p = nullptr;
while(head->next != nullptr)
{
p = head->next->next;
delete head->next;
head->next = p;
}
delete head;
}
int GetLength()
{
return head->date;
}
bool empty()
{
if (head->date == 0)
{
return true;
}
else
return false;
}
Node* create(int date)
{
Node* node = new Node;
node->date = date;
node->next = nullptr;
node->prev = nullptr;
return node;
}
void HeadInsertNode(int date)
{
Node *p = create(date);
Node *q = head->next;
p->prev = head;
p->next = q;
if (q == nullptr)
{
head->next = p;
head->date++;
return;
}
q->prev = p;
head->next = p;
head->date++;
}
void EndInsertNode(int date)
{
Node *q = create(date);
Node *p = head;
while(p->next != nullptr)
{
p = p->next;
}
q->prev = p;
q->next = nullptr;
p->next = q;
head->date++;
}
void IndexInsertNode(int n , int date)
{
if (n <= head->date && n>=1)
{
Node *q = create(date);
Node *p = head;
for (int i = 0; i < n-1; ++i)
{
p = p->next;
}
q->prev = p;
q->next = p->next;
p->next->prev = q;
p->next = q;
head->date++;
}
else
cout << "数值越界" << endl;
}
void DeleteIndexNode(int n)
{
if (n <= head->date && n >= 1)
{
Node *p = head;
for (int i = 0; i < n-1; ++i)
{
p = p->next;
}
Node *q = p->next;
p->next = q->next;
q->next->prev = p;
delete q;
head->date--;
}
else
cout << "数值错误" << endl;
}
void print()
{
Node *p = head;
while(p->next != nullptr)
{
//cout << "ddd" << endl;
p = p->next;
cout << p->date << ' ';
}
cout << endl;
cout << "reverse" << endl;
while(p != head)
{
cout << p->date << ' ';
p = p->prev;
}
cout << endl;
}
};
int main()
{
DLLNode L;
for (int i = 0; i < 10; ++i)
{
L.EndInsertNode(i);
//printf("0000\n");
}
L.print();
cout << "IndexInsertNode" << endl;
L.IndexInsertNode(1,10);
L.print();
cout << "delete" << endl;
L.DeleteIndexNode(7);
L.print();
return 0;
}