#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node{
char ch;
struct node *link;
}Node;
Node *creat(int n)
{
int i;
Node *head,*p1,*p2;
for(i=0;i<n;i++)
{
p1=(Node *)malloc(sizeof(Node));
printf("输入第%d个节点:",i+1);
scanf("%c",&p1->ch);
if(i==0) head=p1;
else p2->link=p1;
p2=p1;
}
p2->link=NULL;
return (head);
}
Node *del(Node *head,char ch)
{
Node *p1,*p2;
while(head->ch==ch)
{
p1=head;
head=head->link;
free(p1);
}
p2=head;
while(p2->link!=NULL)
{
p1=p2->link;
if(p1->ch==ch)
{
p2->link=p1->link;
free(p1);
}
else
{
p2=p1;
}
}
return (head);
}
int main()
{
Node *head,*p1;
int n;
char ch;
printf("请输入节点数量:\n");
scanf("%d",&n);
head=creat(n);
printf("请输入要删除的字符:\n");
scanf("%c",&ch);
head=del(head,ch);
p1=head;
if(p1==NULL)
printf("空链表\n");
else
do
{
printf("%c",p1->ch);
p1=p1->link;
}while(p1!=NULL);
return 0;
}
修改如下,供参考:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node{
char ch;
struct node *link;
}Node;
Node *creat(int n)
{
int i;
Node *head,*p1,*p2;
for(i=0;i<n;i++)
{
p1=(Node *)malloc(sizeof(Node));
printf("输入第%d个节点:",i+1);
fflush(stdout);rewind(stdin);
scanf("%c",&p1->ch);
if(i==0) head=p1;
else p2->link=p1;
p2=p1;
}
p2->link=NULL;
return (head);
}
Node *del(Node *head,char ch)
{
Node *p1,*p2;
if(head->ch == ch)//while(head->ch==ch)
{
p1=head;
head=head->link;
free(p1);
return (head);
}
p2=head;
while(p2->link!=NULL)
{
p1=p2->link;
if(p1->ch==ch)
{
p2->link=p1->link;
free(p1);
}
else
{
p2=p1;
}
}
return (head);
}
int main()
{
Node *head,*p1;
int n;
char ch;
printf("请输入节点数量:\n");
scanf("%d",&n);
head=creat(n);
printf("请输入要删除的字符:\n");
fflush(stdout);rewind(stdin);
scanf("%c",&ch);
head=del(head,ch);
p1=head;
if(p1==NULL)
printf("空链表\n");
else
do
{
printf("%c",p1->ch);
p1=p1->link;
}while(p1!=NULL);
return 0;
}