#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);
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。