使用递归来实现删除单链表中最后一个节点不是数字‘2’
2017-07-24 07:43
288 查看
之前,小编已经写了如何在单链表中删除第一个节点不是数字‘2’ 的代码,那现在改变题目一下,就是如何删除单链表中最后一个节点不是数字‘2’。
其实,思路跟删除第一个节点有点相似,就是得用递归来traverse到最后一个节点,然后进行判断最后一个节点是否是数字‘2’。
下面是list.h 文件里代码展示
我相信,很多人就会觉得直接用tail指针来判断最后一个节点是否是2,如果不是2,那就直接删除,那tail指针就得指向倒数第二个节点上,不然就会出seg fault,所以就得用head指针来进行traverse到倒数第二个节点上,来进行判断最后一个节点。因为是更改链表,就得pass by reference,不能pass by value,所以在prototype上写的是node *& tail。
下面是实现这个函数的代码展示:
上面就是如何实现这道题的代码,感觉是不是挺简短精辟呢!其实递归就是能使代码量缩小的,而且能让别人很清楚你的思路是什么样的。
<
9dda
p>下面是结果展示:
如果最后一个节点是2的话,就不删除,结果同样展示出来给你们看看:
是不是感觉很神奇呢,递归就是这么神奇!
下次,小编还会继续使用递归来实现不同数据结构中的不同功能,敬请期待哦!
记得为小编点赞哦!!
其实,思路跟删除第一个节点有点相似,就是得用递归来traverse到最后一个节点,然后进行判断最后一个节点是否是数字‘2’。
下面是list.h 文件里代码展示
//list.h #include<iostream> #include<cstring> #include<cctype> using namespace std; struct node { int data; node * next; }; class list { public: //These function are already written list(); ~list(); void build(); void display(); //This is the prototype for this question //Remove the last node if the last node is not 2 void remove_last(); private: //Remove the last node if the last node is not 2 void remove_last(node *& tail, node * head); node * head; node * tail; };
我相信,很多人就会觉得直接用tail指针来判断最后一个节点是否是2,如果不是2,那就直接删除,那tail指针就得指向倒数第二个节点上,不然就会出seg fault,所以就得用head指针来进行traverse到倒数第二个节点上,来进行判断最后一个节点。因为是更改链表,就得pass by reference,不能pass by value,所以在prototype上写的是node *& tail。
下面是实现这个函数的代码展示:
//list.cpp #include "list.h" void list::remove_last() { remove_last(tail,head); } void list::remove_last(node *& tail, node * head) { if(!head) return; if(!head->next->next) { if(head->next->data != 2) { delete head->next; head->next = NULL; tail = head; return; } else return; } remove_last(tail,head->next); }
上面就是如何实现这道题的代码,感觉是不是挺简短精辟呢!其实递归就是能使代码量缩小的,而且能让别人很清楚你的思路是什么样的。
<
9dda
p>下面是结果展示:
如果最后一个节点是2的话,就不删除,结果同样展示出来给你们看看:
是不是感觉很神奇呢,递归就是这么神奇!
下次,小编还会继续使用递归来实现不同数据结构中的不同功能,敬请期待哦!
记得为小编点赞哦!!
相关文章推荐
- 使用递归来实现在循环链表里删除第一节点不是数字‘2’
- 使用递归来实现在ARR里如何删除每一个list的第一个节点不是数字‘2’
- 使用递归来实现双向链表里删除第一节点不是数字‘2’
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- 使用JAVA实现单链表的建立、测长、打印、删除、插入、排序、逆置
- 单链表实现删除最小节点的算法
- 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
- 如何使用C++递归来删除单链表中某一个由用户输入特定的值
- 面试题2 编程实现单链表删除节点
- 【JAVASCRIPT】使用ztree树,实现右键增加,修改,删除节点。带有复选框。
- 使用递归删除树形结构的所有子节点(java和mysql实现)
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- 编程实现一个单链表节点的删除
- 编程实现单链表的删除节点
- 带有头指针的链表的 创建 输出 查找 删除 释放 排序(冒泡排序)功能实现(尾插法(自动记录最后一个节点))
- 不用辅助节点,使用_asm{}实现单链表的反转。
- 如何使用C++递归来实现在BST(Binary Search Tree)里将所有的叶子节点上的数字求和
- 剑指offer10--O(1)的时间实现单链表节点的删除
- C++实现单链表删除倒数第k个节点的方法