user-0 提问: c语言链表出现段错误怎么解决

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h>  struct ListNode {     int address;     int data;     int next;     struct ListNode *Next; };  int main() {     int k;     struct ListNode *head;      head=(struct ListNode *)malloc(sizeof(struct ListNode));     head->Next=NULL;      struct ListNode *p,*q;     p = head;     int first;     int number;     int i;     int m;     scanf("%d%d%d",&first,&number,&m);     int l=m;     for(i=0; i<number; i++)     {         q=(struct ListNode *)malloc(sizeof(struct ListNode));         scanf("%d %d %d",&q->address,&q->data,&q->next);          /*         if(head==NULL)      //head不会为NULL了，这个判断是冗余的         {             head=p=q;         }         else         {*/             p->Next=q;             p=q;         //}     }     p->Next=NULL;     p = head->Next;      //输入链表里了     //m=4     struct ListNode *head1,*temp;     head1=(struct ListNode *)malloc(sizeof(struct ListNode));     head1->Next=NULL;     temp=head1;     //while(m)     while(m && p)       //这里可能出现段错误     {         if(p->data==m)         {             q=(struct ListNode *)malloc(sizeof(struct ListNode));             q->address=p->address;             q->data=p->data;             q->next=p->next;             /*             if(head1==NULL)     //同样冗余             {                 head1=temp=q;             }             else             {*/                 temp->Next=q;                 temp=q;             //}             m--;             p=head->Next;         }         else         {             p=p->Next;         }     }   //现在head1内 4 3 2 1     if(number==l)     {         temp->Next=NULL;         p=head1->Next;         int a=0;         while(p)         {             if(a==0)             {                 printf("%05d %d ",p->address,p->data);             }             else             {                 if(p->next!=-1)                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 else                 {                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 }              }             p=p->Next;         }         printf("-1");     }     else     {         p=head->Next;         int a;         a=l+1;         while(a<=number)         {             if(p->data==a)             {                 q=(struct ListNode *)malloc(sizeof(struct ListNode));                 q->address=p->address;                 q->data=p->data;                 q->next=p->next;                 if(head1==NULL)                 {                     head1=temp=q;                 }                 else                 {                     temp->Next=q;                     temp=q;                 }                 a++;                 p=head->Next;             }             else             {                 p=p->Next;             }         }         //printf("1\n");         temp->Next=NULL;         //printf("3\n");         p=head1->Next;         a=0;         while(p)         {             if(a==0)             {                 printf("%05d %d ",p->address,p->data);                 a++;             }             else             {                 if(p->next!=-1)                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 else                 {                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 }             }             p=p->Next;         }         printf("-1");      }     return 0; } 供参考～  功能都写在main中很难理解逻辑；建议功能分别用自定义函数实现，main函数调用的方式谢谢~ 加上之后可能有的测试用例通过了 某些还是会有段错误 我再好好看看

user: user-0
content: 引用 4 楼 自信男孩 的回复:发一下需求里提到的测试用例，以及用例的输出样例；

user: user-1
content: 发一下需求里提到的测试用例，以及用例的输出样例；

user: user-1
content: #include <stdio.h> #include <stdlib.h>  struct ListNode {     int address;     int data;     int next;     struct ListNode *Next; };  int main() {     int k;     struct ListNode *head;      head=(struct ListNode *)malloc(sizeof(struct ListNode));     head->Next=NULL;      struct ListNode *p,*q;     p = head;     int first;     int number;     int i;     int m;     scanf("%d%d%d",&first,&number,&m);     int l=m;     for(i=0; i<number; i++)     {         q=(struct ListNode *)malloc(sizeof(struct ListNode));         scanf("%d %d %d",&q->address,&q->data,&q->next);          /*         if(head==NULL)      //head不会为NULL了，这个判断是冗余的         {             head=p=q;         }         else         {*/             p->Next=q;             p=q;         //}     }     p->Next=NULL;     p = head->Next;      //输入链表里了     //m=4     struct ListNode *head1,*temp;     head1=(struct ListNode *)malloc(sizeof(struct ListNode));     head1->Next=NULL;     temp=head1;     //while(m)     while(m && p)       //这里可能出现段错误     {         if(p->data==m)         {             q=(struct ListNode *)malloc(sizeof(struct ListNode));             q->address=p->address;             q->data=p->data;             q->next=p->next;             /*             if(head1==NULL)     //同样冗余             {                 head1=temp=q;             }             else             {*/                 temp->Next=q;                 temp=q;             //}             m--;             p=head->Next;         }         else         {             p=p->Next;         }     }   //现在head1内 4 3 2 1     if(number==l)     {         temp->Next=NULL;         p=head1->Next;         int a=0;         while(p)         {             if(a==0)             {                 printf("%05d %d ",p->address,p->data);             }             else             {                 if(p->next!=-1)                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 else                 {                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 }              }             p=p->Next;         }         printf("-1");     }     else     {         p=head->Next;         int a;         a=l+1;         while(a<=number)         {             if(p->data==a)             {                 q=(struct ListNode *)malloc(sizeof(struct ListNode));                 q->address=p->address;                 q->data=p->data;                 q->next=p->next;                 if(head1==NULL)                 {                     head1=temp=q;                 }                 else                 {                     temp->Next=q;                     temp=q;                 }                 a++;                 p=head->Next;             }             else             {                 p=p->Next;             }         }         //printf("1\n");         temp->Next=NULL;         //printf("3\n");         p=head1->Next;         a=0;         while(p)         {             if(a==0)             {                 printf("%05d %d ",p->address,p->data);                 a++;             }             else             {                 if(p->next!=-1)                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 else                 {                     printf("%05d\n%05d %d ",p->address,p->address,p->data);                 }             }             p=p->Next;         }         printf("-1");      }     return 0; } 供参考～  功能都写在main中很难理解逻辑；建议功能分别用自定义函数实现，main函数调用的方式

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-0

user: user-0
content: 输入测试用例调试运行下去都没有错误