qq_31750507 2015-12-08 08:10 采纳率: 52.6%
浏览 1485

@数据结构大神:查找并删除循环链表中的元素。85行的打印。为啥错了,求解

 //循环单链表删除KEY.c:是否在、在首、唯一一个、在尾 
# include<stdio.h>
# include<stdlib.h>
# include<malloc.h>
# define array_size 50
typedef struct Node{
 char data;
 struct Node *next;
}Node,*Linklist;
int i,len,key,array[array_size]; 
Linklist head;

Linklist Createlist(int *array,int len)
{
 Linklist temp,ptr;
 head=(Node*)malloc(sizeof(Node));
 if(head==NULL)//if(!head)
 {printf("内存分配失败!");return NULL;} 

 head->data=array[0];
 head->next=NULL;
 temp=head;

 for(i=0;i<len;i++)
 {
 ptr=(Node*)malloc(sizeof(Node));
 if(ptr==NULL)//if(!ptr)
 {printf("内存分配失败!");return NULL;} 

 ptr->data=array[i];
 temp->next=ptr;
 temp=temp->next;
 }
 ptr->next=head;

 return head;
}

void Delete(Linklist head)
{
 Linklist p,q,r;
 p=(Node*)malloc(sizeof(Node));
 if(p==NULL)//if(!head)
  printf("内存分配失败!");
 q=(Node*)malloc(sizeof(Node));
 if(q==NULL)//if(!head)
  printf("内存分配失败!");
 r=(Node*)malloc(sizeof(Node));
 if(r==NULL)//if(!head)
  printf("内存分配失败!");

 p=head;r=head;
 while(p->data!=key)
 {q=p;p=p->next;}//q是前驱 

 if(p==head) 
  {
   if(head->next==NULL)
      {head=NULL;free(head);printf("NULL\n");}//删除头节点后为空 
     else
      {r=p->next;head=NULL;free(head);q=r->next;}//r是后继 删除头节点后不为空 
  }

 if(p->next=head)//p是尾节点
  {
   p=p->next;free(p);r=p->next;q->next=r;
  } 

 else
  {
    r=p->next;p->next=r->next;free(p);r=q->next; 
  }
}


void Print(Linklist head)
{
 Linklist s;
 s=(Node*)malloc(sizeof(Node));
 if(s==NULL)//if(!head)
 printf("内存分配失败!");
 s=head;

 while(s->next!=head)//打印节点的数值,哪里错了?求解释 
  {printf("%d,",s->data);s=s->next;}
} 


int main()
{
 printf("input len key:\n");
 scanf("%d %d",&len,&key);
 for(i=0;i<len;i++)
 scanf("%d",&array[i]);

 Createlist(array,len);
 Delete(head);
 Print(head);

 return 0;
}



//@数据结构大神:查找并删除循环链表中的元素。85行的打印。为啥错了,求解释?

  • 写回答

2条回答 默认 最新

  • bdmh 移动开发领域优质创作者 2015-12-08 08:20
    关注

    你是不是应该判一下s->next是不是有效啊,否则当s被赋值为无效指针时,你再访问它的data就会报错

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!