王道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. 打印出三位数的水仙花数Python

    水仙花数计算 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪ ...

  2. centOS 在线安装lnmp

    CentOS7源码安装最新版LNMP环境   lnmp环境版本如下: 系统:CentOS 7 x86_64 NGINX:nginx-1.7.12 数据库:mariadb-10.0.13 PHP:php ...

  3. VS2019+EF6连接Mysql

    开发环境:Win10 + VS2019Mysql服务器版本:8.0.16 一.下载并安装插件(必备) MySQL-Connector-net-6.9.12  链接https://cdn.mysql.c ...

  4. asp.net core MVC 过滤器之ExceptionFilter过滤器(一)

    简介 异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器.用于在系统出现未捕获异常时的处理. 实现一个自定义异常过滤器 自定义一个异常过滤器需要实现IExceptionFilter接口 publ ...

  5. 2019 学而思java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.学而思等公司offer,岗位是Java后端开发,因为发展原因最终选择去了学而思,入职一年时间了,也成为了面试官 ...

  6. FreeRTOS 任务通知模拟计数型信号量

    举例 //释放计数型信号量任务函数 void SemapGive_task(void *pvParameters) { u8 key; while(1) { key = KEY_Scan(0); // ...

  7. springboot读取静态资源文件的方式

    springboot的请求路径一般会经过Controller处理,但是静态资源文件在请求之后是直接返回的.这涉及到俩个配置项. spring.mvc.static-path-pattern=/** s ...

  8. jieba分词及词频统计小项目

    import pandas as pd import jieba import jieba.analyse from collections import Counter,OrderedDict ji ...

  9. org.apache.ibatis.exceptions.PersistenceException:

    org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.Ill ...

  10. spring mvc @RequestMapping method 不写的话,默认GET、POST都支持,根据前端方式自动适应

    @RequestMapping(value="/") method 不写的话,默认GET.POST都支持,根据前端方式自动适应.