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