cyclelist.h
#pragma once
#include <iostream>
using namespace std;
class Node
{
public:
Node() {}
Node(int e, Node* p = nullptr) : data(e), next(p) {}
~Node() {}
public:
int data;
Node* next;
};
class CycleList
{
public:
CycleList();
~CycleList();
//判断列表是否为空
bool isEmpty();
//头部添加元素
void appendHead(int e);
//尾部添加元素
void appendTail(int e);
//获取元素位置
int getElemPos(int e);
//获取指定位置的Node指针
Node* getElement(int pos);
//向指定位置插入元素
void insertElem(int pos, int e);
//删除首个与e相同的元素
void deleteElem(int e);
//移除pos位置上的元素
void removeElem(int pos);
//清空列表
void clear();
//打印列表
void printList();
int getLength() { return m_length; }
private:
Node* head;
Node* rear;
int m_length;
};
cyclelist.cpp
#include "CycleList.h"
CycleList::CycleList()
: m_length(0)
{
head = new Node;
head->next = head;
head->data = 0;
rear = nullptr;
}
CycleList::~CycleList()
{
if (head)
{
Node* p = head->next;
while (p != rear)
{
head->next = p->next;
delete p;
p = head->next;
}
delete head;
head = nullptr;
delete rear;
rear = nullptr;
}
}
bool CycleList::isEmpty()
{
if (m_length > 0)
return false;
return true;
}
void CycleList::appendHead(int e)
{
if (head == head->next)
{//空表
Node* node = new Node(e);
head->next = node;
node->next = node;
rear = node;
}
els