华为OJ(从单向链表中删除指定值的节点)
2015-08-23 11:08
369 查看
描述 | 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};详细描述:本题为考察链表的插入和删除知识。链表的值不能重复构造过程,例如1 -> 23 -> 25 -> 14 -> 57 -> 2最后的链表的顺序为 2 7 3 1 5 4 删除 结点 2 则结果为 7 3 1 5 4 |
---|---|
知识点 | 链表,指针,结构体 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 1 输入链表结点个数 2 输入头结点的值 3 按照格式插入各个结点 4 输入要删除的结点的值 |
输出 | 输出删除结点后的序列 |
样例输入 | 5 2 3 2 4 3 5 2 1 4 3 |
样例输出 | 2 5 4 1 |
主要是单链表的插入和删除,当然下面的代码肯定还有需要改进的地方,比如题目链表的值不能重复(对每个值循环查询判断是否已经存在即可,或者用set容器),但因对重复的情况没有要求返回值,这里不给出相应部分代码。
#include<iostream> using namespace std; struct Node { int m_key; Node * m_pnext; }; int pInsert(Node* phead,int insert_key,int find_key) { if(phead==NULL) return 0; Node * pNode=phead; while(pNode->m_key!=find_key&&pNode!=NULL) { pNode=pNode->m_pnext; } Node * Node_insert=new Node; Node_insert->m_key=insert_key; Node_insert->m_pnext=pNode->m_pnext; pNode->m_pnext=Node_insert; return 1; } Node* pDelete(Node* phead,int delete_key) { Node* pNode=phead; if(pNode->m_key==delete_key) { phead=pNode->m_pnext; delete pNode; return phead; } while(pNode->m_pnext->m_key!=delete_key)//找到被删除的前一个节点 pNode=pNode->m_pnext; Node *pDestr=pNode->m_pnext; pNode->m_pnext=pDestr->m_pnext; delete pDestr; return phead; } int pDestroy(Node* phead) { Node * pNode; while(phead!=NULL) { pNode=phead->m_pnext; delete phead; phead=pNode; } return 1; } int main() { int n,head,insert_key,find_key,delete_key; cin>>n>>head; Node * phead=new Node; phead->m_pnext=NULL; phead->m_key=head; for(int i=0;i<n-1;i++) { cin>>insert_key>>find_key; pInsert(phead,insert_key,find_key); } cin>>delete_key; phead=pDelete(phead,delete_key); Node * pOut=phead; while(pOut->m_pnext) { cout<<pOut->m_key<<" "; pOut=pOut->m_pnext; } cout<<pOut->m_key<<endl; pDestroy(phead); //system("pause"); return 0; }
相关文章推荐
- Android之使用MediaMetadataRetriever类获取媒体信息
- CSS排序工具csscomb
- PostgreSQL Replication之第十章 配置Slony(1)
- 结合例子理解排他(exclusive)锁和共享(shared)锁
- linux 下安装编译配置 QT
- oracle 给新增字段加中文备注
- 运维人员如何最大限度避免误删除文件(20160627更新)
- 运维人员如何最大限度避免误删除文件(20160627更新)
- 运维人员如何最大限度避免误删除文件(20160627更新)
- struts2 中action 跳转问题 同一个package、不同package
- 五种 JSP页面跳转方法详解
- perl 监控端口
- [leetcode-169]Majority Element(java)
- 线程控制(阻塞、睡眠、让步)
- 图的遍历
- 【shell脚本练习】网卡信息和简单日志分析
- 【shell脚本练习】网卡信息和简单日志分析
- 初学软工——软件计划
- MTU(最大传输单元)
- (转载)如何设计一款优秀的软件架构