#include<stdio.h>

#include<stdlib.h>

#define N 9

typedef struct node{

int data;

struct node * next;

}ElemSN;

ElemSN*Createlink(int a[],int n){

int i;

ElemSN*h=NULL,*p,*t;

for(i=0;i<N;i++){

p=(ElemSN*)malloc(sizeof(ElemSN));

p->data=a[i];

if(!h)

h=t=p;

else

p->next=h;

t=t->next=p;

}

return h;

}//建立循环链表

ElemSN*DelKeyNode(ElemSN*h,int key){

ElemSN*p,*q;

p=h;

q=NULL;

do{

if(p->data-key) {//遍历的结点的data与key不相等

q=p;

p=p->next;

}//指针后移,继续遍历

else break;//相等跳出循环

}while(p-h);//循环结束:1.p指针只在与key值相等的结点上;2:p指针遍历完链表没找到,此时p=h;

if(p==h&&q)

printf("NO\n");

else {

if(p==h){//头结点data==key,此时需要找到h的上一个结点,

for(q=h;q->next-h;q=q->next);//q在h的上一结点

h=h->next; //h后移

}

q->next=p->next;//断链

free(p);

}

return h;

}

void Printlink(ElemSN*h){

ElemSN*p;

p=h;

do{

printf("%2d\n",p->data);

p=p->next;

}while(p-h);

}

int main(void){

int a[N]={1,2,3,4,5,6,7,8,9};

int key;

ElemSN*head;

head=Createlink(a,9);

printf("key=");

scanf("%d",&key);

head=DelKeyNode(head,key);

Printlink(head);

}