【问题标题】:Can't insert a node in first position in linked list无法在链表的第一个位置插入节点
【发布时间】:2020-06-20 16:52:53
【问题描述】:

我正在从事与制作 GIF 短片相关的帧编辑项目。我想添加一个函数来更改所选框架的位置。例如,如果我想将一个名为“3”的框架移动到第一个位置:

之前:

1->2->3->4->5->6->NULL

之后:

3->1->2->4->5->6->NULL

当我在列表中间或末尾选择位置时,这对我有用,但在输入位置 1 时不起作用。 我的功能:

void insertFrameNode(FrameNode** list, FrameNode* addNode, int pos)
{
    int i = 0; // for loops
    FrameNode* before = *list;
    FrameNode* head = *list;
    if (pos == 1)
    {
        addNode->next = head;
        *list = addNode;
    }
    else 
    {
        for (i = 0; i < pos - 2; i++)
        {
            before = before->next;
        }
        addNode->next = before->next;
        before->next = addNode;
    }
    
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 使用调试器 :)
  • 还有,你确定pos不应该是0吗?
  • 问题是我使用了多个 c 文件,所以编译器并不总是符合我的停止标记。我会用 0 试试。
  • 如果您提供问题的minimal reproducible example 可能更容易帮助您。此外,您的问题更有可能获得赞成而不是反对。
  • 列表看起来像什么而不是 3->1->2->4->5->6->NULL?

标签: c linked-list


【解决方案1】:

head 是列表的指针。
然后你将列表的指针等同于添加节点。
因为:(*list)-&gt;next = head; === (*list)-&gt;next = addnode; === addnode-&gt;next = addnode

【讨论】:

  • 好的。我把它改成了 `addNode->next = head; *list = addNode `
  • 现在 addNode 将首先指向然后,成为第一个。对我来说似乎还可以,但仍然无法正常工作......
  • 如果这有帮助,请将答案标记为正确,如果您给业力加分,我将不胜感激)
  • 不幸的是,我无能为力。我不能在家里重复这个问题。我认为调试器会帮助你)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
相关资源
最近更新 更多