第二章 链表 递归算法删除不带头结点的单链表值为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);
}
标签:结点,表值,temp,int,next,链表,data,LinkedList 来源: https://blog.csdn.net/Cgxxxxxxxxxxxxxx/article/details/122607958