使用递归来实现在循环链表里删除第一节点不是数字‘2’
2017-07-23 16:04
423 查看
之前,小标已经写了如何使用递归来实现在单链表里删除第一个节点不是数字‘2’。那现在,小编继续用C++递归来实现在循环链表里删除第一个节点,如果第一个节点不是数字‘2’, 就将它删除。
对于循环链表的实现,目前小编只知道两种方法,第一种,就是将循环链表先断开成单链表,然后再将表连接起来。第二种,就是不将循环链表断开,直接就以循环链表来实现,但是,这种情况很容易会实现死循环。 现在,小编就用第二种方法来实现这道题目。
现在,小编还是将.h 文件里一些prototype写出来。下面就是”clist.h” 文件夹里的代码
现在,为了解决这道题,那就得使用wrapper functin 和 recursive function ,这些函数的prototype 必须写在 .h 文件里,那下面就是如何写prototype的代码展示。
在 .h 文件里写完prototype之后,就得在 .cpp 里来实现这两个函数。
下面就是 clist.cpp 的file
这个就是用C++递归来实现这道题的,是不是感觉用递归很简单呢!
下面是结果的截图
从结果中,可以看出,是不是已经实现这个功能呢了,是不是很神奇呢!
以后,小编还会继续用递归来实现数据结构中的某些问题,请听下回分解!
如果对诸位有所帮助,就点赞吧!
对于循环链表的实现,目前小编只知道两种方法,第一种,就是将循环链表先断开成单链表,然后再将表连接起来。第二种,就是不将循环链表断开,直接就以循环链表来实现,但是,这种情况很容易会实现死循环。 现在,小编就用第二种方法来实现这道题目。
现在,小编还是将.h 文件里一些prototype写出来。下面就是”clist.h” 文件夹里的代码
//This is the clist.h #include<iostream> #include<cstring> #include<cctype> using namespace std; struct node { int data; node * next; }; class list { public: //These function already written list(); ~list(); void build(); void display(); private: node * rear; };
现在,为了解决这道题,那就得使用wrapper functin 和 recursive function ,这些函数的prototype 必须写在 .h 文件里,那下面就是如何写prototype的代码展示。
//clist.h #include<iostream> #include<cstring> #include<cctype> using namespace std; struct node { int data; node * next; }; class list { public: //These function already written list(); ~list(); void build(); void display(); //这就是 wrapper function //Remove the first node if the first node is not 2 void remove_first(); private: //这是 recursive function //Remove the first node if the first node is not 2 void remove_first(node *& rear); //这是尾指针 node * rear; };
在 .h 文件里写完prototype之后,就得在 .cpp 里来实现这两个函数。
下面就是 clist.cpp 的file
//clist.cpp #include "clist.h" void list::remove_first() { //这个是为了将指针指向第一个节点 //这样就将这个指针传给recursive function remove_first(rear->next); } void list::remove_first(node *& rear) { //This is the base case if(!rear) return; if(rear->data != 2) { node * temp = rear->next; delete rear; rear = NULL; rear = temp; return; } }
这个就是用C++递归来实现这道题的,是不是感觉用递归很简单呢!
下面是结果的截图
从结果中,可以看出,是不是已经实现这个功能呢了,是不是很神奇呢!
以后,小编还会继续用递归来实现数据结构中的某些问题,请听下回分解!
如果对诸位有所帮助,就点赞吧!
相关文章推荐
- 使用递归来实现双向链表里删除第一节点不是数字‘2’
- 使用递归来实现删除单链表中最后一个节点不是数字‘2’
- 使用递归来实现在ARR里如何删除每一个list的第一个节点不是数字‘2’
- 删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 只知道某个单向链表的中的某个指针,且该指针不是尾指针,如何删除该节点。
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- 编程实现单链表和双链表删除节点
- 删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)java
- PHP 循环删除无限分类子节点的实现代码
- c语言使用链表编写一个可以实现班级学生管理系统,增加,删除,修改学生信息
- 循环链表内节点删除
- 使用单向循环链表实现约瑟夫问题
- [原]C语言实现双向链表删除节点、插入节点、双向输出等操作
- 实现链表的逆序输出和删除某节点
- 删除两个双向循环链表中具有相同值的节点
- 一个单向链表,只知道某个节点的指针p,但是p不是尾节点,请编程删除节点p.
- 内核链表使用--删除链表节点
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- stackoverflow | C/C++ | 如何不使用循环和判断语句实现“打印从1到100之间的数字”