数据结构之链表(c语言实现)
题目:数据域重复,删除关键字为key的结点。
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node * next;
}ElemSN;//建立链表单元
ElemSN * Delkey(ElemSN * h,int key)
{
ElemSN*p,*q,*m;
for(m=h;m;m=m->next){
for(p=h;p&&p->data-key;q=p,p=p->next);
if(p){
if(p==h)h=h->next;
else {
q->next=p->next;
free(p);
p=NULL;
}
}
}
return h;
}//删除key的结点
void printkey(ElemSN*h){
ElemSN *p;
p=h;
for(p=h;p;p=p->next)
printf("%5d",p->data);
}
int main()
{
int data[8]={1,2,3,4,4,5,5,7};
ElemSN * head,*h=NULL,*t,*newp;
int i;
for(i=0;i<8;i++){
newp=(ElemSN*)malloc(sizeof(ElemSN));
newp->data=data[i];
newp->next=NULL;
if(!h)h=t=newp;
else
t=t->next=newp;
}
head=Delkey(h,5);
printkey(head);
}