單向鏈表接口與實現(已調試)
單項鍊表接口:
class LinkedList
{
private:
static class Node
{
public:
int m_element;
Node * next;
public:
Node(int element, Node * next)
{
this->m_element = element;
this->next = next;
}
};
private:
int m_size;
Node * first;
public:
LinkedList();
~LinkedList();
public:
//清空鏈表
void clear();
//返回對應索引的元素
int get(int index);
//在索引處設置對應的值
int set(int index, int element);
//在尾部添加元素
void add(int element);
//在任意索引位置添加元素
void add(int index, int element);
//刪除結點
int remove(int index);
//鏈表的長度
int size();
private:
Node* node(int index);
};
單向鏈表的實現:
#include "LinkedList.h"
LinkedList::LinkedList()
{
}
LinkedList::~LinkedList()
{
}
//清空鏈表
void LinkedList::clear()
{
for (int i = 0; i < this->m_size; i++)
{
Node * tmp = this->first;
this->first = tmp->next;
delete tmp;
}
this->first = NULL;
this->m_size = 0;
return;
}
//返回對應索引的元素
int LinkedList::get(int index)
{
if (index<0 || index>this->m_size)
{
printf("func get() err\n");
return -1;
}
Node * pCurrent = this->first;
for (int i = 0; i < index; i++)
{
pCurrent = pCurrent->next;
}
return pCurrent->m_element;
}
//在索引處設置對應的值
int LinkedList::set(int index, int element)
{
Node * old = node(index);
int tmp = old->m_element;
old->m_element = element;
return tmp;
}
//在尾部添加元素
void LinkedList::add(int element)
{
add(this->m_size, element);
}
//在任意索引位置添加元素
void LinkedList::add(int index, int element)
{
if (index<0 || index>this->m_size)
{
printf("func add() err\n");
return;
}
if (index == 0)
{
this->first = new Node(element, first);
}
else
{
Node * pPrev = node(index - 1);
pPrev->next = new Node(element, pPrev->next);
}
this->m_size++;
}
//獲取index
LinkedList::Node* LinkedList::node(int index)
{
if (index<0 || index>this->m_size)
{
printf("func node() err\n");
}
Node *pCurrent = this->first;
for (int i = 0; i < index; i++)
{
pCurrent = pCurrent->next;
}
return pCurrent;
}
//刪除結點
int LinkedList::remove(int index)
{
if (index == 0)
{
Node * tmp = this->first;
this->first = tmp->next;
int empE = tmp->m_element;
delete tmp;
this->m_size--;
return empE;
}
else
{
Node * pPrev = node(index - 1);
Node * tmp = pPrev->next;
pPrev->next = tmp->next;
int empE = tmp->m_element;
delete tmp;
this->m_size--;
return empE;
}
}
int LinkedList::size()
{
return this->m_size;
}