这是链表中remove_from_front的正确实现吗?

时间:2015-03-29 00:15:56

标签: c linked-list heap

只是想知道这是否是remove_from_front的正确实现。

struct lnode {
    int item;
    struct lnode *next;
};

// remove_from front consumes a linked list that is stored on the heap and removes the first list.
    void remove_from_front(struct lnode **list) {
    struct lnode *next = (**list).next;
    free(*list);
    *list = next;
    }

1 个答案:

答案 0 :(得分:1)

就功能而言,它看起来没问题。现在提供一些健壮性提示:

  • 如果列表为空,则函数将变为乱序(并且通常是段错误)。这可能是可取的,但应记录在案。
  • 该函数既不检查上述情况,也不检查最终的NULL参数。这应该是assert ed。

重做:

// Removes the head from a non-empty list whose nodes have been malloc'ed.
void remove_from_front(struct lnode **list) {
    assert(list && "The parameter must not be NULL");
    assert(*list && "The list must not be empty");

    struct lnode *next = (**list).next;
    free(*list);
    *list = next;
}