单链表的C++实现

C++实现简单的单链表,功能:创建单链表,遍历输出链表节点数据,删除整个链表,删除某个节点,插入节点。

值的说明的是,该链表头结点不存储数据,删除节点与加入接点均从头结点的next节点开始操作。

#include <iostream>
using namespace std;
struct Node
{
	int data=0;
	Node* next=NULL;
};
class LinkList
{
private:
	int size;
	Node* head;
public:
	
	LinkList(int size)
	{
		head = new Node;
		this->size = size;
	}

	Node* CreateLinkList(int size)
	{
		//Node* head = NULL;
		Node* ptemp = this->head;  //头结点data为0,表示不存数据。
		for (int i = 0; i < size; i++)
		{
			ptemp->next = new Node;
			ptemp = ptemp->next;
			ptemp->data = i + 1;

		}
		return head;
	}
	void DisplayLinkList()
	{
		Node* temp = head;
		while (temp != NULL)
		{
			cout << temp->data << endl;
			temp = temp->next;

		}
	}

	Node* BYELinkList()
	{
		Node* newptr = head;
		while (head != NULL)
		{
			newptr = head->next;
			delete(head);
			head = newptr;
		}
		return head;
	}

	void InsertLinkList(Node* node, int n)
	{
		//头插
		if (n < 2)
		{
			node->next = head->next;
			head->next = node;
			this->size++;
		}
		//中间插
		if (n >= 2 && n < size)
		{
			Node* temp = head;
			for (int i = 1; i < n; i++)
			{
				temp = temp->next;
			}
			node->next = temp->next;
			temp->next = node;
			this->size++;
		}
		//尾插
		if (n >= size)
		{
			Node* temp = head;
			for (int i = 1; i <= size; i++)
			{
				temp = temp->next;
			}
			temp->next = node;
			this->size++;

		}	
	}
	void DeleteLinkList(int n)
	{
		//头删
		if (n < 2)
		{
			Node* ptemp = head->next;
			head->next = ptemp->next;
			delete(ptemp);
		}
		//中间删
		if (n >= 2 && n < size)
		{
			Node* ptemp = head;			
			for (int i = 1; i < n; i++)
			{
				ptemp = ptemp->next;
			}
			Node* pnew = ptemp->next;
			ptemp->next = pnew->next;
			delete(pnew);
		}
		//尾删
		if (n >= size)
		{
			Node* ptemp = head;
			for (int i = 1; i < size; i++)
			{
				ptemp = ptemp->next;
			}
			Node* pnew = ptemp->next;
			ptemp->next = NULL;
			delete pnew;
		}
	}
};

int main() {
	int size=5;
	LinkList* ptr = new LinkList(size);
	Node* head = ptr->CreateLinkList(size);      //创建链表
	ptr->DisplayLinkList();                     //展示链表
	//Node* Deleted_head = ptr->BYELinkList();   //删除链表
	Node* node = new Node();
	node->data = 100;

	ptr->InsertLinkList(node,3);
	ptr->DisplayLinkList();

	ptr->DeleteLinkList(6);
	ptr->DisplayLinkList();

	return 0;
}

输出结果:

0 1 2 3 4 5

0 1 2 100 3 4 5

0 1 2 100 3 4


版权声明:本文为weixin_43504370原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。