+ -
当前位置:首页 → 问答吧 → 一个奇怪的问题

一个奇怪的问题

时间:2010-07-19

来源:互联网

这一段时间在研究链表,写了个单链表翻转的例子,可是只输出了一个值,调试发现,内存地址正确,可就是在next却变为了0x0,不能访问。
贴代码:
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct stu{
  4.         int data;
  5.         struct stu *next;
  6. }student;

  7. student *head = NULL;

  8. student *insert(student **p,int data)
  9. {
  10.         student *new = malloc(sizeof(student));
  11.         new->data = data;
  12.        
  13.         new->next = *p;
  14.         *p = new;
  15.        
  16.         return *p;
  17. }
  18. void output(student *p)
  19. {
  20.         int i = 0;
  21.         while(p)
  22.         {
  23.                 printf("%d:%d\n",++i,p->data);
  24.                 p = p->next;
  25.         }
  26. }
  27. student *reverse(student *pre,student *p)                //反转程序,应该没什么问题
  28. {
  29.         if(!p)
  30.                 return NULL;
  31.         if(!p->next)
  32.         {
  33.                 p->next = pre;
  34.                 return p;
  35.         }
  36.         else
  37.         {
  38.                 student *first;
  39.                 first = reverse(pre,p->next);
  40.                 p->next = pre;
  41.                 return first;
  42.         }
  43. }
  44. int main(void)
  45. {
  46.         insert(&head,12);
  47.         insert(&head,28);
  48.         insert(&head,10);
  49.         insert(&head,17);
  50.        
  51.        
  52.         student *p = reverse(NULL,head);                //调试的时候,display p->next 就显示内存无法访问
  53.        
  54.         output(p);                        //这里只输出了12
  55.        
  56.         return 0;
  57. }
  58.        
复制代码
求各位高手帮忙解答,小弟先谢谢了。

作者: jasfidfjds   发布时间: 2010-07-19

好像就是输出12,你的reverse可能有问题。按你写的那个reverse:从17一直走到12,然后每个递归里的reverse返回的都是p,也就是最后的12那个node的地址。所以,按你写的就是输出12。

作者: poke006   发布时间: 2010-07-19