标签:循环链表 span return key amp turn typedef printf int
#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);
}
标签:循环链表 span return key amp turn typedef printf int
原文地址:http://blog.51cto.com/13645380/2154856