循环链表的key删除-创新互联

#include

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比新吴网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式新吴网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖新吴地区。费用合理售后完善,10余年实体公司更值得信赖。

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

}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻标题:循环链表的key删除-创新互联
URL分享:http://scyanting.com/article/pedee.html