【问题标题】:delete a node in linked list doesn't work in c删除链表中的节点在c中不起作用
【发布时间】:2015-12-06 23:03:38
【问题描述】:

我想从链表中删除一个节点,但它不起作用。这是我的代码:

jL Delete(jL* node,int n)
{
jL first1, n_th, save;
int count = 0;
save = first1 = n_th = (*node);
while(first1->next)
{
   first1 = first1->next;
    count++;
    if(count == (n-1))
    break;
}


while ( first1->next != NULL )
{
    first1 = first1->next;
    save = n_th;
    n_th = n_th->next;
}

save->next = n_th->next;
free(n_th);
return (&node);}

我的错误在哪里?你能帮帮我吗

【问题讨论】:

  • 不显示数据声明,修改本地副本,返回参数地址。这应该足够了。
  • 哦,调试器............DCV
  • 我已经回滚了你的编辑 - 如果你想删除你的问题,请这样做,但不要只是删除代码 - 它使你的问题无法理解,而且它呈现现有的回答没用。

标签: c data-structures linked-list


【解决方案1】:

您似乎想要以下内容。我想列表中元素的索引从 0 开始。

jL Delete( jL* node, int n )
{
    jL current = *node;
    jL prev = NULL;

    while ( current != NULL && n != 0 )
    {
        prev = current;
        current = current->next;
        --n;
    }

    if ( n == 0 && current != NULL )
    {
        if ( prev == NULL ) *node = current->next;
        else prev->next = current->next;

        free( current );
    }

    return *node;
}

【讨论】:

    【解决方案2】:

    由于列表指针已更新,因此无需返回值,否则函数可以返回通过/失败指示符(如果 n 不在列表中则失败)。

    void remove_node(jL* node, int n)
    {
    jL *ppNode = node;
    jL pNode;
        if(node == NULL || *node == NULL)
            return;
        while(n--){
            ppNode = &((*ppNode)->next);
            if(*ppNode == NULL)             /* if n not in list */
                return;                     /*   just return */
        }
        pNode = *ppNode;                    /* delete node */
        *ppNode = (*ppNode)->next;
        free(pNode);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-30
      • 2016-01-02
      • 2016-03-02
      • 1970-01-01
      • 2022-01-08
      • 2017-10-21
      • 2013-08-30
      • 2019-05-10
      相关资源
      最近更新 更多