【发布时间】:2021-02-08 13:10:17
【问题描述】:
我需要在链表的给定位置插入一个节点。 有没有更好的方法呢? 这是我的代码:
struct node
{
int data;
node* next;
};
void InsertNodeAtPosition(node *& first , int x , int position)
{
//0 based indexing
int i = 0;
node *q = new node;
q = first;
while (i != position - 1)
{
q = q->next;
i++;
}
node *t = new node;
t->data = x;
t->next = q->next;
q->next = t;
}
我对其进行了测试,它确实有效。但我想在进入下一章之前真正擅长链表。谢谢!
【问题讨论】:
-
对于链表之类的东西,我总是建议从使用笔和纸开始。通过在几张纸上绘图来执行所有操作。为节点绘制方框,为链接绘制箭头。在修改箭头(链接)时擦除并重新绘制它们。
-
你正在创建一个新节点,然后立即删除指向它的指针,造成内存泄漏,这里:
node *q = new node; q = first;这看起来不对。 -
并且在测试代码时,始终使用边缘情况(如
0或列表长度减一作为索引,使用空列表、一节点列表、二节点列表、三节点列表)。并且还使用 invalid 数据进行测试(这里你的函数会失败,尝试在列表末尾给出position)。 -
对于代码的评论有codereview.stackexchange.com,尽管你应该在那里发布正确的代码。要求审核的问题通常过于宽泛或基于意见
-
@idclev463035818 那我该怎么做呢?
标签: c++ pointers recursion linked-list singly-linked-list