链式存储——链表的创建和遍历

#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,即可通过此找到以该实参为头结点的整个链表;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值