#include <iostream>
using namespace std;
#include <stack>
struct ListNode
{
int _value;
ListNode* _next;
};
void AddToTail(ListNode** pHead, int value)
{
ListNode* pNew = new ListNode();
pNew->_value = value;
pNew->_next = NULL;
if (NULL == *pHead)
{
*pHead = pNew;
}
else
{
ListNode* head = *pHead;
while (head->_next!=NULL)
{
head = head->_next;
}
head->_next = pNew;
}
}
void Remove(ListNode** pHead, int value)
{
if (NULL == pHead || NULL == *pHead)//安全检查
{
return;
}
ListNode* head = *pHead;//最好不要使用参数直接进行逻辑运算
ListNode* delNode = NULL;//要删除的节点
if (value == head->_value)//要删除的节点为头结点
{
delNode = head;
head = head->_next;
*pHead = head; //必须有这一步,不然到下一次删除会找不到头结点///
}
else
{
while ((head->_next != NULL) && (head->_next->_value != value)) //要删除的节点为非头结点
{
head = head->_next;
}
if ((head->_next != NULL) && (head->_next->_value) == value)//找到_value与value 相同的节点的前一个节点
{
delNode = head->_next; //将要删除的节点赋给 delNode
head->_next = head->_next->_next;//将要删除的节点的前一个节点指向要删除的节点的后一个节点
}
}
if (delNode != NULL)//判断是否找到_value==value的节点,delNode为空则没有找到,否则找到了,删除它
{
delete delNode;
delNode = NULL;//置空指针,防止错误访问到野指针
}
}
void ReversePrintList(ListNode* pHead)//从尾到头打印单链表,是一个"后进先出的特点",所以可以先把所有的节点push进栈中
{
if (NULL == pHead)
{
return;
}
ListNode* pNode = pHead;
stack<ListNode*> s;
while (NULL != pNode->_next)
{
s.push(pNode);
pNode = pNode->_next;
}
while (!s.empty())
{
cout << s.top()->_value<<" ";
s.pop();
}
cout << endl;
}
void Test()
{
ListNode* pHead = NULL;
ReversePrintList(pHead);
AddToTail(&pHead, 1);
AddToTail(&pHead, 2);
AddToTail(&pHead, 3);
AddToTail(&pHead, 4);
AddToTail(&pHead, 5);
AddToTail(&pHead, 6);
AddToTail(&pHead, 7);
AddToTail(&pHead, 8);
AddToTail(&pHead, 9);
AddToTail(&pHead, 10);
Remove(&pHead, 1);
Remove(&pHead, 2);
Remove(&pHead, 3);
Remove(&pHead, 4);
Remove(&pHead, 5);
Remove(&pHead, 6);
Remove(&pHead, 7);
Remove(&pHead, 8);
Remove(&pHead, 9);
Remove(&pHead, 10);
Remove(&pHead, 5);
Remove(&pHead, 100);
ReversePrintList(pHead);
}
int main()
{
Test();
system("pause");
return 0;
}
关于单链表的尾插,删除,反向打印单链表
最新推荐文章于 2020-06-16 23:57:03 发布