#include<iostream>
using namespace std;
//链表结构体
struct LNode
{
int data;
LNode* next;
};
//创建一个含有n个结点的链表,L1为头结点
//结点data元素从1开始递增,步长为1
void create(LNode &L1,int n)
{
int i = 2;
LNode *p = &L1; //p指向头结点
L1.data = 1;
while(n!=1)
{
LNode *temp = new LNode;
if (n!=2)
{
p->next = temp;
temp->data = i;
p = temp;
}
else
{
p->next = temp;
temp->data = i;
temp->next = NULL;
}
n--;i++;
}
}
//遍历链表
void print(LNode L1)
{
LNode *p = &L1;
while(p) //若p不等于NULL
{
cout<<p->data<<endl;
p = p->next;
}
}
int main()
{
LNode a;
create(a,15);
print(a);
}
上述代码最终将输出1,2,3……14,15;
思考:为什么创建链表时需要引用,遍历时不需要?
创建链表时以某个结点作为头结点开始创建,倘若不用引用,形参L1是暂态的,实参单纯地给形参赋了值,接下来的操作和实参没有任何关系,当函数调用完后,形参会被释放,因此并不能通过该实参找到整个链表;
遍历链表时,因为打印都是在函数里实现的,因此只需将头结点的data和next传递给形参,形参得到了实参的next,即可通过此找到以该实参为头结点的整个链表;