第二章 链表 递归算法删除不带头结点的单链表值为x的节点
2022/1/20 20:14:07
本文主要是介绍第二章 链表 递归算法删除不带头结点的单链表值为x的节点,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct LinkedList{
int data;
struct LinkedList *next;//指针
}LinkedList;
int a[4]={1,2,3,4};
int n=4;
void buildList(LinkedList *l){
LinkedList *s;
LinkedList *temp=l;
temp->data=a[0];
if(n==1){
temp->next=NULL;
}else{
for(int i=1;i<n;i++){
s=(LinkedList *)malloc(sizeof(LinkedList));
s->data=a[i];
temp->next=s;
temp=temp->next;//一开始temp指向的是a[0],执行完这一条temp指向的是当前数组的i
}
temp->next=NULL;//这里要加上 temp指向的后一个元素为空 否则while循环不终止
}
}
void show(LinkedList *l){
LinkedList *s=l;
while(s){//指向了链表头
printf("%d ",s->data);
s=s->next;
}
}
void del(LinkedList *&l,int x){//也许会修改l指针当前指向链表的元素地址所以加一个&符
//如果我们不加&不修改地址而且还free(temp)那么释放完后当前的temp中仍然后原来的数据
//指针就会指向别的地方
if(l==NULL){
return;
}
LinkedList *temp;//第一个节点
if(x==l->data){
temp=l;//temp记录前一个元素
l=l->next;//如果第一个就是我们要找的元素直接l=l->next;
//这里free(temp)不知道应不应该加
del(l,x);
}else{
del(l->next,x);
}
}
int main(){
LinkedList List;
LinkedList *L=&List;
buildList(L);
printf("当前的链表:\n");
show(L);
printf("删除后的链表:\n");
del(L,1);
show(L);
}
这篇关于第二章 链表 递归算法删除不带头结点的单链表值为x的节点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南