链表-----创建链表、正向打印、反向打印(栈、递归两种方法)、删除结点、链表尾增加结点

链表-----创建链表、正向打印、反向打印、删除结点、链表尾增加结点

#include<iostream>
#include<stdio.h>
#include<stack>
using namespace std;


struct ListNode
{
	int value;
	ListNode *next;
};
//创建链表
ListNode* CreatList()
{
	ListNode* pHead = new ListNode();
	ListNode *rear = pHead;
	pHead->value = 0;
	for (int i = 1;i < 10;++i)
	{
		ListNode *p = new ListNode();
		p->value = i;
		rear->next = p;
		rear = p;
		p = p->next;
	}
	rear->next = nullptr;
	return pHead;
}
//打印链表
void PrintList(ListNode* Head)
{
	if (Head == nullptr)
		return;
	while (Head != nullptr)
	{
		printf("%d ", Head->value);
		Head = Head->next;
	}
	printf("\n");
}
//在链表结尾增加结点
void AddToTail(ListNode *pHead, int value)
{
	ListNode* pNew = new ListNode();
	pNew->value = value;
	pNew->next = nullptr;
	if (pHead == nullptr)
		pHead = pNew;
	else
	{
		ListNode* pNode = pHead;
		while (pNode != nullptr&&pNode->next != nullptr)
		{
			pNode = pNode->next;
		}
		pNode->next = pNew;
	}
}
//删除结点
void RemoveNode(ListNode* Head, int value)
{
	if (Head == nullptr)
		return;
	ListNode *DeleteNode = nullptr;
	if (Head->value == value)
	{
		DeleteNode = Head;
		Head = Head->next;
	}
	else
	{
		ListNode *pNode = Head;
		while (pNode->next != nullptr&&pNode->next->value != value)
		{
			pNode = pNode->next;
		}
		if (pNode->next != nullptr&&pNode->next->value == value)
		{
			DeleteNode = pNode->next;
			pNode->next = pNode->next->next;
		}
	}
	if (DeleteNode != nullptr)
	{
		delete DeleteNode;
		DeleteNode = nullptr;
	}
}
//反转打印链表(用栈)
void PrintListReversingly_Iteratively(ListNode* Head)
{
	std::stack<ListNode*>nodes;
	ListNode* pNode = Head;
	while (pNode != nullptr)
	{
		nodes.push(pNode);
		pNode = pNode->next;
	}
	while (!nodes.empty())
	{
		pNode = nodes.top();
		printf("%d ", pNode->value);
		nodes.pop();
	}
	printf("\n");
}
//反转打印链表(递归)
void PrintListReversingly_Recursively(ListNode* Head)
{
	ListNode* pNode = Head;
	if (pNode != nullptr)
	{
		if (pNode->next != nullptr)
		{
			PrintListReversingly_Recursively(pNode->next);
		}
		printf("%d ", pNode->value);
	}
}

int main()
{
	ListNode *Head = CreatList();
	PrintList(Head);
	
	AddToTail(Head,100);
	PrintList(Head);

	RemoveNode(Head, 5);
	PrintList(Head);

	PrintListReversingly_Iteratively(Head);
	PrintListReversingly_Recursively(Head);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39916039/article/details/82146763
今日推荐