繁体   English   中英

如何使用单个指针从链表中删除节点?

[英]How can I delete an node from a linked list with a single pointer?

我研究的这本书#include一个练习,要求我们修改以下代码,该代码从链表中删除一个节点,并构建另一个仅用一个指针执行完全相同操作的函数:

struct node {
    int value;
    struct node * next;
};

struct node delete_from_list( struct node * list , int n){
struct node *cur, *prev;

for (cur = list, prev = NULL;
    cur != NULL && cur -> value != n;
    prev = cur, cur -> next)
;

if(cur == NULL)
    return list;
else if(prev == NULL)
    list = list -> next;
else
prev -> next = cur -> next;

free(cur);
return list;
}

我在网上看到的一些代码是:

struct node *delete_from_list(struct node **list, int n) {
    struct node *entry = *list;
    while (entry) {
        if (entry->value == n) {
            *list = entry->next;
            free(entry);
            break;
        }
        list = &entry->next;
        entry = entry->next;
    }
    return *list;
}

但我对此有两个反对意见:

  1. 这段代码实际上包含两个指针entrylist

  2. 我们是free()输入entry但继续使用它“感觉”像一个错误。

请,如果您愿意提供帮助,请解释我的反对意见或编写新代码。 谢谢。

  1. 这段代码实际上包含两个指针entrylist

您需要构建一个使用单个指针的算法。 在您的情况下,尽管看起来像两个,但entry算法使用的一个指针,除了list之外,它实际上是包含 algorithm函数的输入。

  1. 我们是free()输入条目,但继续使用它“感觉”像一个错误。

该代码在释放它后不使用entry 一旦释放,循环立即中断,因为break语句在调用free

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM