王道P37 T1 :

设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。

王道上的答案绝对是错的,我自己想了一个


函数主体

LinkList* del_x(LinkList* prior,LinkList* L,int x){
if(L==NULL) return NULL;
if(L->data==x){
if(prior==NULL){
LinkList* ans=L->next;
delete L;
if(ans!=NULL) ans=del_x(NULL,ans,x); //通过这个语句,如果链表开头全是x,全部删除
return ans; //头结点含x,返回非x元素
}else{
prior->next=L->next;
delete L;
del_x(prior,prior->next,x);
return prior;
}
}
if(L->data!=x){
del_x(L,L->next,x);
return L; //头结点不含x,返回头结点
}
}

调用方法:

L=*del_x(NULL,&L,);

完整代码:

#include <stdlib.h>
#include <cstdio> using namespace std; typedef struct LinkList{
int data;
struct LinkList * next=NULL;
LinkList(){ }
LinkList(int x){
data=x;
}
}LinkList; LinkList build_list(int *arr,int n){
LinkList L(arr[]);
LinkList* p=&L;
int i;
for(i=;i<n;i++){
p->next=new LinkList(arr[i]);
p=p->next;
}
return L;
} void print_list(LinkList & L){
LinkList* p=&L;
while(p){
printf("%d ",p->data);
p=p->next;
}
puts("");
} LinkList* del_x(LinkList* prior,LinkList* L,int x){
if(L==NULL) return NULL;
if(L->data==x){
if(prior==NULL){
LinkList* ans=L->next;
delete L;
if(ans!=NULL) ans=del_x(NULL,ans,x); //通过这个语句,如果链表开头全是x,全部删除
return ans; //头结点含x,返回非x元素
}else{
prior->next=L->next;
delete L;
del_x(prior,prior->next,x);
return prior;
}
}
if(L->data!=x){
del_x(L,L->next,x);
return L; //头结点不含x,返回头结点
}
} int main(){
int arr[]={,,,,,};
LinkList L=build_list(arr,);
print_list(L);
L=*del_x(NULL,&L,);
print_list(L);
}

测试效果:

链表 | 递归删除不带头结点链表所有x元素的更多相关文章

  1. 链表习题(1)-设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点

    /*设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点*/ /* 算法思想:设f(L,x)的功能是删除以L为首结点指针的单链表中所有值等于x的结点, 则显然有f(L->next,x)的 ...

  2. C语言实现单链表节点的删除(带头结点)

    我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...

  3. JAVA单链表的实现-不带头结点但带有尾指针

    1,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾 ...

  4. JAVA单链表的实现-不带头结点且没有尾指针

    本程序采用JAVA语言实现了线性表的链式实现.首先定义了线性表的接口ListInterface,然后LList类实现了ListInterface完成了链表的实现. 本实现中,链表是不带表头结点的,且有 ...

  5. 083 Remove Duplicates from Sorted List 有序链表中删除重复的结点

    给定一个排序链表,删除所有重复的元素使得每个元素只留下一个.案例:给定 1->1->2,返回 1->2给定 1->1->2->3->3,返回 1->2- ...

  6. 不带头结点的单链表递归删除元素为X的结点

    #include <iostream> using namespace std; struct Node { Node *next; int elem; }; void creatList ...

  7. 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)

    所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...

  8. 剑指offer-两个链表的第一个公共结点-链表-python

    题目描述 输入两个链表,找出它们的第一个公共结点.   class Solution: def FindFirstCommonNode(self, pHead1, pHead2): # write c ...

  9. C++单链表类(带头结点)

    Link.h #ifndef _LINK_0411 #define _LINK_0411 #include <string> #include <iostream> //定义数 ...

随机推荐

  1. php 无限极分类,根据父级 找子级

    /** * @param $data 数据(二维数组格式) * @param $adminId 管理员ID * @param $pid 权限的上级ID * @param int $level 水平变量 ...

  2. 冒泡排序法vs快速排序法

    闲着没事,想思考一下两种排序法的直观对比,写了个小程序,代码如下,分析见后面: class Program { static DateTime t1, t2; static TimeSpan ts1, ...

  3. C# Newtonsoft.Json 你必须知道的一些用法

    最近在做接口开发,对方团队开发了一个Web API 的接口,传输数据的格式是 JSON.当时看到这个东西,感觉很简单,也没想什么,没用多久就完成了我的功能,我完成的功能很简单,就是获取数据,然后把数据 ...

  4. Grafana官方和社区提供的dashboard

    详见:https://grafana.com/grafana/dashboards 可以在左侧配置筛选条件,非常强大. 当然Grafana中所有的Dashboard通过JSON进行共享,下载并且导入这 ...

  5. jQuery---jq操作标签文本(html(),text()),jq操作文档标签(插入,删除,修改),克隆,,jq操作属性,jq操作class属性,jq操作表单value,jq操作css,jq操作盒子(重要),jq操作滚动条

    jQuery---jq操作标签文本(html(),text()),jq操作文档标签(插入,删除,修改),克隆,,jq操作属性,jq操作class属性,jq操作表单value,jq操作css,jq操作盒 ...

  6. Prime Path POJ-3126

    The ministers of the cabinet were quite upset by the message from the Chief of Security stating that ...

  7. 2017-07-26 ThinkPHP简单使用

    ThinkPHP是什么?有何优点? ThinkPHP 是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架,ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括: * MVC支持 ...

  8. 微信小程序中使用全局变量解决页面的传值问题

    由于项目需要,最近便在做 一个类似于美团的餐饮平台的的微信微信小程序 ,项目有十几个页面,那么页面间的传值被经常用到.在小程序中页面间的传值主要有使用全局变量和本地存储这两种方法,在这个项目中我采用的 ...

  9. 16、css实现div中图片占满整个屏幕

    <div class="img"></div> .img{ background: url("../assets/image/img.png&qu ...

  10. 英语apyrite红碧玺apyrite单词

    红碧玺(apyrite)是粉红.桃红.玫瑰红.深红.紫红等以红色调为主的碧玺,矿物学上主要属于锂电气石和镁电气石.红色起因可能与微量锰及锂和铯有关. 红色是碧玺中价值最高的,其中以紫红色和玫瑰红色最佳 ...