【说明】:

  本文是左程云老师所著的《程序员面试代码指南》第二章中“在单链表中删除指定值的节点”这一题目的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

在单链表中删除指定值的节点相关推荐

  1. 在单链表中删除指定值的节点。

    在单链表中删除指定值的节点. 题目:给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除. 例如1->2->3->4->4->null,输出 ...

  2. 单链表中删除指定值的节点

    题目 给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除. 基本思路 方法一.时间复杂度O(N),空间复杂度O(N). 利用栈或者其他存储结构.将不等于num的节点收集 ...

  3. 算法总结之 在单链表中删除指定值的节点

    给定一个链表的头节点head和一个整数num,请实现函数将值num的节点全部删除 方法一 利用栈或者其他容器收集的方法  时间复杂度O(N)  额外空间复杂度O(N) 将值不等于num的节点收集起来! ...

  4. C++实现之单链表中删除指定值

    解题思路: (1) 新建单向链表: (2) 删除链表中的指定值: 步骤一:   排除特殊情况:头结点值等于需要删除值data,则先直接删除头部节点: 步骤二: 使用快慢指针ptemp, qtemp; ...

  5. 链表问题14——在单链表种删除指定值的节点(方法二)

    题目 题目可参考上一篇文章,删除链表中的指定值 思路 方法二:不用任何容器,直接调整.时间复杂度O(N),空间复杂度O(1) 因为最后计划返回链表头,所以先遍历链表按顺序找到第一个不等于num的节点作 ...

  6. 链表问题14——在单链表种删除指定值的节点

    题目 给定一个链表的头节点head和一个整数num,实现函数将值为num的节点全部删除. 原链表 删除后链表 1->2->3->4->null,  num=3 1->2- ...

  7. 链表问题2——在单链表中删除倒数第K个节点

    题目 实现一个函数,可以删除单链表中倒数第K个节点. 要求 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 思路 如果链表为空或者K值小于1,直接返回head即可,除此之外,从 ...

  8. 从无头单链表中删除节点 结构之法 4

    题目: 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除. 分析与解答: 假设给定的指针为pCurrent,Node *pN ...

  9. 编程之美-从无头单链表中删除节点方法整理

    [试题描述] 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除. 程序:

  10. python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法

    本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...

最新文章

  1. 手机群发短信脚本python
  2. 构造函数和析构函数能否声明为虚函数?
  3. java删除文件模糊_Java实现的模糊匹配某文件夹下的文件并删除功能示例
  4. 最强大的人工智能系统 | NVIDIA DGX-2
  5. 电子政务方向:We7.Cloud政府云门户
  6. 删除mysql临时文件_mysql自动备份数据库与自动删除临时文件
  7. 《软件测试技术实战:设计、工具及管理》—第2章 2.7节测试用例不应该包含实际的数据...
  8. 【Oracle】服务器端监听配置
  9. 端午节,我们好好聊聊程序员这个群体
  10. 【Git/Github学习笔记】Git课程简介
  11. PCL Examples
  12. java 校验银行卡号_Java + OpenCV 实现银行卡号识别 (3)
  13. Python办公自动化——批量发送邮件
  14. 【历史上的今天】2 月 11 日:首款 Ubuntu 手机问世;苹果的天使投资人诞生;电子工业联盟正式停运
  15. 八年,腾讯优图攒了多厚的技术“家底”?
  16. 喜讯 | 人大金仓荣获行业信息化领航企业奖
  17. neovim符号自动补全auto-pairs
  18. 马航 失联飞机 猜想
  19. 利用模板设计组合模式的心得
  20. MediaPlayer详解和使用

热门文章

  1. Markdown 编辑器 Editor.md 使用
  2. java设计一个user类_java – 如何使用两种不同类型的用户组织OO设计
  3. OpenJDK8 JAVA应用窗口在不同缩放比例下的表现(Windows10)
  4. 有人培训设计模式,吾表示难以理解,因为根本没用
  5. JAVA CLASS混淆工具:Allatori 简单试用
  6. 编程基本功:带着本子却不记录,你以为听懂了记住了,不可能的
  7. 文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
  8. jogamp-env.xml:48: Unsupported Java version: 11. Make sure that the version of the Java compiler is
  9. 航空界关于安全飞行的海恩法则
  10. C++类中在构造器中调用本类的另外构造器