循环链表的key删除

#include

成都创新互联公司服务项目包括文水网站建设、文水网站制作、文水网页制作以及文水网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,文水网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到文水省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

#include

#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

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);

}


网站标题:循环链表的key删除
本文来源:http://myzitong.com/article/ighggi.html