将链表包装在仅包含列表头部的另一个结构中是不正确的做法还是反模式?

jos*_*epi 3 c standards anti-patterns wrapper

例如,使用C,假设我定义了一个这样的节点:

typedef struct nde {
    int val;
    struct nde* next;
}node;
Run Code Online (Sandbox Code Playgroud)

然后我用这样的东西"包裹"它:

typedef struct lst {
    node* head;
}list;
Run Code Online (Sandbox Code Playgroud)

我具体是指这个案子.我知道如果你想要包含其他信息,使用包装器会很有用,但如果它只包含指向头部的指针,那么它被认为是"不好的做法"吗?对我来说这是一种更直观的方式,主要是因为在推送或弹出或使用其他功能时,你总是会取消引用,命名约定也更有意义.

Bar*_*mar 8

不,这不是反模式,它实际上并不罕见.这允许您具有引用列表的单个句柄,当您删除元素时,该句柄不会更改.如果不这样做,那么删除列表的第一个元素是一种特殊情况,因为您需要更新调用者的指针以指向新头.如果列表有多个引用,则几乎不可能安排更新所有引用.

如果您知道只有一个引用列表,那么就没有必要这样做了.

  • 平衡的答案. (2认同)