关于链表的循环输入

链表在输入时会牵扯到不断地创建新节点,因此需要不断地在堆区申请内存。刚开始在做这个的时候考虑到申请内存就需要给指针起名字,但是如果需要每个节点都要起名字就无法放到循环中去。此问题的解决方法是,不用给每个新开辟的节点(即指针)起名字直接在堆区申请内存并赋值给当前节点的下一节点。如下图所示,是循环输入一个链表代码

  while (1)
    {
        cin >> temp;
        if (temp == -1)
        {
            break;
        }
        l1->val = temp;
        l1->next = new ListNode(0);
        l1 = l1->next;
    }

但是此代码也会有一个问题,就是当代码结束退出的时候(即输入-1的时候)上一个循环已经新开辟了一个节点,因此存在着多开辟一个节点的问题,故在打印或使用链表的时候应注意,最后一个节点不能用,这只需将链表的使用条件由当前节点不为空改为当前节点的下一个节点不为空

 while (temp_1->next != NULL)
    {
        cout << temp_1->val << endl;
        temp_1 = temp_1->next;
    }

当然,关于多创建了最后一个节点的问题还可以有如下解决方法

              while (1)
    {
        cin >> te

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值