链表-----创建链表、正向打印、反向打印、删除结点、链表尾增加结点
#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;
}