| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 542 人关注过本帖
标题:求大神指点啊 看不懂的链表
只看楼主 加入收藏
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:5 
求大神指点啊 看不懂的链表
#include  <stdio.h>
#include  <stdlib.h>
#define    N    5
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
void fun(NODE  *h)
{ NODE  *p, *q, *r;
/**********found**********/
  p = h->next;
/**********found**********/
  if (p==NULL)  return;
  q = p->next;
  p->next = NULL;
  while (q)
  {  r = q->next;    q->next = p;
/**********found**********/
     p = q;         
     q =r;
  }
  h->next = p;
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
  h = (NODE *)malloc(sizeof(NODE));
  h->next = NULL;
  for(i=0; i<N; i++)
  {  q=(NODE *)malloc(sizeof(NODE));
     q->data=a[i];
     q->next = NULL;
     if (h->next == NULL)  h->next = p = q;
     else    {  p->next = q;  p = q;   }
  }
   return  h;
}
void outlist(NODE  *h)
{ NODE  *p;
  p = h->next;
  if (p==NULL)  printf("The list is NULL!\n");
  else
  {  printf("\nHead  ");
     do
     {  printf("->%d", p->data); p=p->next;  }
     while(p!=NULL);
     printf("->End\n");
  }
}
main()
{  NODE  *head;
   int  a[N]={2,4,6,8,10};
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   fun(head);
   printf("\nThe list after inverting :\n");
   outlist(head);
}

解释 这个就行了
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
  h = (NODE *)malloc(sizeof(NODE));
  h->next = NULL;
  for(i=0; i<N; i++)
  {  q=(NODE *)malloc(sizeof(NODE));
     q->data=a[i];
     q->next = NULL;
     if (h->next == NULL)  h->next = p = q;
     else    {  p->next = q;  p = q;   }
  }
   return  h;
搜索更多相关主题的帖子: next void include return 
2012-03-24 21:36
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:5 
程序代码:
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
  h = (NODE *)malloc(sizeof(NODE));//创建头结点h,待会返回,作为链表的标示
  h->next = NULL;
  for(i=0; i<N; i++)
  {  q=(NODE *)malloc(sizeof(NODE));//创建链接点,存数据的
     q->data=a[i];//赋值
     q->next = NULL;//你用的是尾插法,赋值NULL
     if (h->next == NULL)  h->next = p = q;//第一次添加链表操作,p指向链表尾,q指向待添加结点
     else    {  p->next = q;  p = q;   }//从尾部添加结点
  }
2012-03-24 21:48
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
错了 解释这个  p = h->next;
/**********found**********/
  if (p==NULL)  return;
  q = p->next;
  p->next = NULL;
  while (q)
  {  r = q->next;    q->next = p;
/**********found**********/
     p = q;         
     q =r;
  }
  h->next = p;
}
2012-03-24 21:52
derek5257
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2012-3-24
收藏
得分:5 
我是新手,这个太难,看不懂
2012-03-24 21:54
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
要加把劲学习啊
2012-03-24 21:55
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:10 
程序代码:
错了 解释这个  p = h->next;//下面这段代码实现的是 将整个链表逆序
/**********found**********/
  if (p==NULL)  return;//如果链表为空,就不用干
  q = p->next;//q指向第二个结点,(p是q的前驱结点)
  p->next = NULL;//逆序后第一个结点就是尾节点,自然p->next=NULL
  while (q)
  {  r = q->next; //保存后继结点,因为q的后继结点即将变为它原来的前驱结点
     q->next = p;//看变了
/**********found**********/
     p = q;      //剩下的你懂了    
     q =r;
  }
  h->next = p;
}
2012-03-24 22:15
快速回复:求大神指点啊 看不懂的链表
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055458 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved