之前,小编已经写了如何用递归来实现单链表和循环链表里删除第一个节点不是数字‘2’的做法了,现在,小编继续用递归来实现双向链表里删除第一个节点不是数字‘2’ 的题目。小编几乎很少用循环来实现数据结构的问题了,所以只能用递归了。
下面,就是dlist.h 文件里的代码块
//dlist.h
#include<iostream>
#include<cstring>
#include<cctype>
#include<cstdlib>
using namespaced std;
struct node
{
int data;
node * previous;
node * next;
};
class list
{
public:
//These function are already written
list();
~list();
void build();
void display();
private:
node * head;
node * tail;
};
同样,继续使用wrapper function 和 recursive function 来实现
//dlist.h
#include<iostream>
#include<cstring>
#include<cctype>
#include<cstdlib>
using namespaced std;
struct node
{
int data;
node * previous;
node * next;
};
class list
{
public:
//These function are already written
list();
~list();
void build();
void display();
//Remove the first node if the first node is not 2
void remove_first();
private:
//Remove the first node if the first node is not 2
void remove_first(node *& head);
node * head;
node * tail;
};
下面就是来实现这两个函数在 clist.cpp 文件里。
//clist.cpp
#include "clist.h"
void list::remove_first()
{
remove_first(head);
}
void list::remove_first(node *& head)
{
if(!head)
return;
if(head->data != 2)
{
node * temp = head->next;
delete head;
head = NULL;
temp->previous = NULL; //This need to be cautions
head = temp;
return;
}
}
小编是在linux环境下运行的,下面就是结果截图:
因为这是双向链表,所以就会看到resulting list 会展示两遍,一遍是traverse forward, 一遍是traverse backward,这样才符合双向链表的特性。
小编接下来还会继续写如何用递归来实现各个功能在不同的数据结构中,请听下回分解!
如果这个对各位有所帮助,那就点赞吧!哪里讲的不对,就留言!