單向鏈表接口與實現(C++)

單向鏈表接口與實現(已調試)

單項鍊表接口:

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章