首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这个链表的程序一直不明白,请大家帮忙解决!解决方法

2012-03-06 
这个链表的程序一直不明白,请大家帮忙解决!#include iostream.htypedefstructnode//自定义类型Node{intd

这个链表的程序一直不明白,请大家帮忙解决!
#include <iostream.h>
typedef   struct   node   //自定义类型Node
{
int   data;   //数据域
struct   node   *next;   //指针域
}Node;

Node   *createlist(int[],int);
void   displist(Node   *);
void   freelist(Node   *);

void   main()
{
Node   *head;
int   a[]={3,6,2,7};
head=createlist(a,4);
displist(head);
freelist(head);
}

Node   *createlist(int   a[],int   n)   //建立一个链表
{
Node   *head,*r,*s;
for(int   i=0;i <n;i++)
{
s=(Node   *)   new   (Node);   //建立一个新结点s
//s=new   Node;
s-> data   =a[i];
s-> next   =NULL;
if(i==0)
{
head=s;   //head为首结点指针
r=s;   //r总是指向最后结点
}
else
{
r-> next   =s;   //链接接点s
r=s;
}
}
return   head;
}

为什么执行完r-> next   =s;后就把下一结点的地址传给了head-> next??是如何实现的????   r,s,head三者之间是通过什么相关联的?????

请详细讲解一下,非常感谢!!!!

[解决办法]
r-> next =s;

s是下一节点的地址, r-> next = s 自然就是就把下一结点的地址传给了head-> next ( 当i == 2 )时,
i == 3 时 就把下一节点地址给了 head-> next-> next, 以此类推

r,s,head三者之间通过在结构体内定义的指针关联
[解决办法]
说了r每次记录上个节点的信息,实际上当你让r-> next等于 s的地址就相当于链表内上一个节点内next的指针值被赋予s的地址值,链表每新建一个节点,那么链表链也在不断的向前对进,前面的节点的next值都在其后一个节点创建的时候被赋值
[解决办法]
要知道r,s,head都是指针阿,在给第2个节点也就是head节点后面一个节点赋值之前指针head和指针r指向的是同一个内存换句话说这个时候做r-> next与head-> next都是同一个内存单元啊,兄弟似乎还没有弄清楚什么叫做指针阿
[解决办法]

楼主主要是将指针和对象本身混为一谈.链表建立是对象之间建立联系,也就是:

a.next -> b.next -> c.next -> null

然后不管你指针改变指向a, b, 或c, 只要不简洁修改,都和对象没啥关系. 指针之所以不停的改变,其目的就是为了:

r-> next =s; //链接接点s

只要做完这个对象数据的修改,指针就可以功成身退了.
然后只要保留指向第一个对象的指针, 就能遍历整个链表了.


[解决办法]

s=new Node; //这里创建了下一个节点
r-> next = s; //这里修改上一个节点的数据成员指向下一个节点.


[解决办法]
为什么r-next = s就相当于head-> next = s;????
请详解,谢谢!!


楼主这个还不清楚吗?

加第一个节点后,head 和r指向的是同一个节点,r = head,加入第二个时 ,r-next = s就相当于head-next = s了,此时,head指向头节点,r指向尾节点,r!=head,加入第三个节点时,r-next = s 就不能说相当于head-next = s了,r-next = s与head-next = s相当只是在加入第二个节点时有效

热点排行