已知整型链表,设计算法,删除所有结点值为x的结点,删除的结点个数通过形参返回。
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}Node,*LinkList;
LinkList create(){
LinkList h,r,s;
h=(LinkList)malloc(sizeof(Node));
r=h;
int a;
scanf("%d",&a);
while(a!=-1){
s=(LinkList)malloc(sizeof(Node));
s->data=a;
r->next=s;
r=s;
scanf("%d",&a);
}r->next=0;
return h;
} //以上是尾插法建立链表
LinkList find_pre(LinkList h,int x){
LinkList p=h->next,q=h;
while(p&&p->data!=x){
q=p;
p=p->next; //求前导
}return q;
}int fun1(LinkList h,int *count,int x,LinkList q){
LinkList p=h->next,s;
while(p){
if(p->data==x){ //如果满足条件,删除此结点
q->next=p->next; //让我的后继变成我前导的后继
(*count)++;
q=find_pre(p,x);
}p=p->next;
}return *count;
}
int main(){
LinkList head,p,q;
int count=0;
head=create();
q=find_pre(head,5);
fun1(head,&count,5,q);
printf("%d\n",count);
for(p=head->next;p;p=p->next)
printf("%d",p->data); //遍历列表,查看是否出错
return 0;
}
头插法建立列表:
LinkList create(){
LinkList h,s;
int x;
h=(LinkList)malloc(sizeof(Node));
h->next=0;
scanf("%d",&x);
while(x!=-1){
s=(LinkList)malloc(sizeof(Node));
s->data=x;
s->next=h->next; //头的后继变成我的后继
h->next=s; //我变成头的后继
scanf("%d",&a);
}return h;
}
标签:count,LinkList,int,练习,next,链表,data,Node
From: https://blog.51cto.com/u_16036037/6173846