自己编的链表删除程序,就是有一个问题,无法删除第一个节点!
#include <stdio.h>#include <string.h>
#define LEN sizeof(struct student)
typedef struct student
{
char name[10];
long num;
int age;
struct student *next;
}SS;
int n;
SS *input()
{
SS *head;
SS *p1,*p2;
n=0;
p1=p2=(SS *)malloc(LEN);
head = NULL;
scanf("%ld %s %d",&p1->num,p1->name,&p1->age);
while (p1->num!=0)
{
n=n+1;
if (n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(SS *)malloc(LEN);
scanf("%ld %s %d",&p1->num,p1->name,&p1->age);
}
p2->next=NULL;
return head;
}(以上为链表的建立)
void output(SS *p)
{
while(p)
{
printf("%ld %s %d\n",p->num,p->name,p->age);
p=p->next;
}
}
SS *del(SS *p)
{
SS *p1,*p2;
p1=(SS *)malloc(LEN);
printf ("输入姓名删除信息!\n");
scanf ("%s",p1->name);
//此时p指向第一个节点,我想用
if(strcmp(p->name,p1->name)==0)
{
删除第一个节点代码,但我写不出来啊!
}
//
if (p==NULL)
{
printf ("NONE!\n");
}
p2=p;
p=p->next;
while(p)
{
if(strcmp(p->name,p1->name)==0)
{
p2->next=p->next;
}
p=p->next;
p2=p2->next;
}
n=n-1;
return p;
}
int main()
{
SS *s=NULL;
s=input();
output(s);
del(s);
output(s);
return 0;
}