这个链表程序是如何实现一个结点指向下一个结点的?
#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;
}
这个链表程序是如何实现一个结点指向下一个结点的?请详细讲解一下,非常感谢!!!!
[解决办法]
struct node *next; //指针域
r-> next =s; //链接接点s
r=s; 将s给尾指针实现连接下一结点
[解决办法]
head为头指针, s指向每个用a的指构造的对象, r指向链表最后一个单元
i=0
结果: head指向a[0]构造的对象, s指向a[0]构造的对象, r指向a[0]构造的对象
i=1
结果: head指向a[0]构造的对象, s指向a[1]构造的对象, r指向a[1]构造的对象
i=2
结果: head指向a[0]构造的对象, s指向a[2]构造的对象, r指向a[2]构造的对象
i=3
结果: head指向a[0]构造的对象, s指向a[3]构造的对象, r指向a[3]构造的对象
最后
head指向a[0]构造的对象, r指向a[3]构造的对象
返回head 头指针
[解决办法]
r-> next 变为NULL是等待下一个循环,下一个循环中r-> next = s;这一句会把这个指针指向新建立的节点
然后r=s;这一句相当于r=r-> next;将r指针再次下移到后面的节点
[解决办法]
Node *head=NULL;
Node *createlist(int a[],int n){
Node *temp;
for(int i=0;i <n;i++)
{
temp-> data=a[i];
temp-> next=head;
head=temp;
}
return head;
}