关于单链表的尾插,删除,反向打印单链表
来源:互联网 发布:中标麒麟安装软件 编辑:程序博客网 时间:2024/05/29 19:47
#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; //将要删除的节点赋给 delNodehead->_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;}
0 0
- 关于单链表的尾插,删除,反向打印单链表
- 单链表的头插 尾插 反序 遍历 插入 删除
- 单链表的头插、尾插、删除、合并等操作
- 单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
- 数组的链表实现:创建(头插/尾插)、打印、删除、插入
- 单链表初始化,头插,尾插,查找,删除
- C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)
- 单链表的基本操作(尾插,尾删,头插,头删,查找,指定位置插入、删除,指定元素删除、全部删除等)
- 【C++】用类实现单向单链表的尾插PushBack(),尾删PopBack(),打印PrintSlist()。
- 利用栈反向打印单链表
- 带头结点的链表头插,尾插,中间插以及删除节点
- 单向循环链表的头插,尾插,中间插以及删除节点
- 建立单链表【头插,尾插】
- 数据结构 单链表 头插 尾插 指定位置前插后插 以及 删除指定元素 C++ 面向对象方法实现
- 单链表的基本操作(创建,删除,增加,反向)
- 删除无头单链表的非尾结点并打印单链表
- 单链表的创建、删除与打印
- 单链表的创建,删除,插入以及打印。
- ubnt编译环境搭建
- 牛客网答题笔记---地域划分
- Android之SQLite
- 分布式系统基本概念(一致性、数据分布、复制策略、分布式协议)
- 接触到的elements/attributes整理
- 关于单链表的尾插,删除,反向打印单链表
- 从尾到头打印链表
- Mycat读写分离、主从切换学习
- 点类派生直线类
- hibernate通过数据库表反向生成实体类
- PHP常规正则验证
- [POJ 1811 Prime Test] Miller_Rabin + Pollard_rho 大数质数判断/质因子分解模板
- poj 2253 Frogger(变式Dijkstra)
- MySQL客户端工具