在单链表中删除指定值的节点
【说明】:
本文是左程云老师所著的《程序员面试代码指南》第二章中“在单链表中删除指定值的节点”这一题目的C++复现。
本文只包含问题描述、C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书。
感谢左程云老师的支持。
【题目】:
给定一个链表的头节点 head 和一个整数 num,请实现函数将值为 num 的节点全部删除。
例如,链表为 1->2->3->4->NULL,num=3,链表调整后为:1->2->4->NULL。
【思路】:
解法:注意头节点的处理。
【编译环境】:
CentOS6.7(x86_64)
gcc 4.4.7
【实现】:
实现及测试代码:
1 /* 2 *文件名:list_remove.cpp 3 *作者: 4 *摘要:在单链表中删除指定值的节点 5 */ 6 7 #include <iostream> 8 9 using namespace std; 10 11 class Node 12 { 13 public: 14 Node(int data) 15 { 16 value = data; 17 next = NULL; 18 } 19 public: 20 int value; 21 Node *next; 22 }; 23 24 Node* removeNode(Node *head,int num) 25 { 26 Node *cur = NULL; 27 while(NULL != head) 28 { 29 if(num != head->value) 30 break; 31 cur = head; 32 head = head->next; 33 delete cur; 34 } 35 36 cur = head; 37 Node *pre = head; 38 while(NULL != cur) 39 { 40 if(num == cur->value) 41 { 42 pre->next = cur->next; 43 delete cur; 44 } 45 else 46 { 47 pre = cur; 48 } 49 cur = pre->next; 50 } 51 return head; 52 } 53 54 void printList(Node *head) 55 { 56 while(NULL != head) 57 { 58 cout << head->value << " "; 59 head = head->next; 60 } 61 cout << endl; 62 } 63 64 int main() 65 { 66 Node *head = NULL; 67 Node *ptr = NULL; 68 69 for(int i =1;i<7;i++)//构造链表 70 { 71 if(NULL == head) 72 { 73 head = new Node(i); 74 ptr = head; 75 continue; 76 } 77 ptr->next = new Node(i); 78 ptr = ptr->next; 79 ptr->next = new Node(i); 80 ptr = ptr->next; 81 } 82 cout << "before remove:" << endl; 83 printList(head); 84 cout << "after remove:" << endl; 85 head = removeNode(head,2); 86 printList(head); 87 return 0; 88 }
View Code
注:
转载请注明出处;
转载请注明源思路来自于左程云老师的《程序员代码面试指南》。
转载于:https://www.cnblogs.com/PrimeLife/p/5429652.html
在单链表中删除指定值的节点相关推荐
- 在单链表中删除指定值的节点。
在单链表中删除指定值的节点. 题目:给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除. 例如1->2->3->4->4->null,输出 ...
- 单链表中删除指定值的节点
题目 给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除. 基本思路 方法一.时间复杂度O(N),空间复杂度O(N). 利用栈或者其他存储结构.将不等于num的节点收集 ...
- 算法总结之 在单链表中删除指定值的节点
给定一个链表的头节点head和一个整数num,请实现函数将值num的节点全部删除 方法一 利用栈或者其他容器收集的方法 时间复杂度O(N) 额外空间复杂度O(N) 将值不等于num的节点收集起来! ...
- C++实现之单链表中删除指定值
解题思路: (1) 新建单向链表: (2) 删除链表中的指定值: 步骤一: 排除特殊情况:头结点值等于需要删除值data,则先直接删除头部节点: 步骤二: 使用快慢指针ptemp, qtemp; ...
- 链表问题14——在单链表种删除指定值的节点(方法二)
题目 题目可参考上一篇文章,删除链表中的指定值 思路 方法二:不用任何容器,直接调整.时间复杂度O(N),空间复杂度O(1) 因为最后计划返回链表头,所以先遍历链表按顺序找到第一个不等于num的节点作 ...
- 链表问题14——在单链表种删除指定值的节点
题目 给定一个链表的头节点head和一个整数num,实现函数将值为num的节点全部删除. 原链表 删除后链表 1->2->3->4->null, num=3 1->2- ...
- 链表问题2——在单链表中删除倒数第K个节点
题目 实现一个函数,可以删除单链表中倒数第K个节点. 要求 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 思路 如果链表为空或者K值小于1,直接返回head即可,除此之外,从 ...
- 从无头单链表中删除节点 结构之法 4
题目: 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除. 分析与解答: 假设给定的指针为pCurrent,Node *pN ...
- 编程之美-从无头单链表中删除节点方法整理
[试题描述] 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除. 程序:
- python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法
本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...
最新文章
- 手机群发短信脚本python
- 构造函数和析构函数能否声明为虚函数?
- java删除文件模糊_Java实现的模糊匹配某文件夹下的文件并删除功能示例
- 最强大的人工智能系统 | NVIDIA DGX-2
- 电子政务方向:We7.Cloud政府云门户
- 删除mysql临时文件_mysql自动备份数据库与自动删除临时文件
- 《软件测试技术实战:设计、工具及管理》—第2章 2.7节测试用例不应该包含实际的数据...
- 【Oracle】服务器端监听配置
- 端午节,我们好好聊聊程序员这个群体
- 【Git/Github学习笔记】Git课程简介
- PCL Examples
- java 校验银行卡号_Java + OpenCV 实现银行卡号识别 (3)
- Python办公自动化——批量发送邮件
- 【历史上的今天】2 月 11 日:首款 Ubuntu 手机问世;苹果的天使投资人诞生;电子工业联盟正式停运
- 八年,腾讯优图攒了多厚的技术“家底”?
- 喜讯 | 人大金仓荣获行业信息化领航企业奖
- neovim符号自动补全auto-pairs
- 马航 失联飞机 猜想
- 利用模板设计组合模式的心得
- MediaPlayer详解和使用
热门文章
- Markdown 编辑器 Editor.md 使用
- java设计一个user类_java – 如何使用两种不同类型的用户组织OO设计
- OpenJDK8 JAVA应用窗口在不同缩放比例下的表现(Windows10)
- 有人培训设计模式,吾表示难以理解,因为根本没用
- JAVA CLASS混淆工具:Allatori 简单试用
- 编程基本功:带着本子却不记录,你以为听懂了记住了,不可能的
- 文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
- jogamp-env.xml:48: Unsupported Java version: 11. Make sure that the version of the Java compiler is
- 航空界关于安全飞行的海恩法则
- C++类中在构造器中调用本类的另外构造器