繁体   English   中英

C链表追加到头还是尾?

[英]C linked-list append to head or tail?

我正在看这段代码,实现了双向链表中元素的插入操作。 我试图理解为什么LIST_APPEND宏将其追加到列表的末尾,但是,我总是向自己解释它是最重要的。 码:

struct link {
    struct link *prev;
    struct link *next;
};

void insert(struct link *prev, struct link *new, struct link *next)
{
    prev->next = new;
    new->prev = prev;
    next->prev = new;
    new->next = next;
}

#define LIST_APPEND(member, list, new)    \
    insert(list.prev, &(new->member), &list)

我的考虑:

首先,在C-Preprocessor替换了实际代码中的宏内容之后,我们得到

void insert(list.prev, &(new->member), &list)
{
    (list.prev)->next = (new->member);    //1.
    (new->member)->prev = list.prev;      //2.
    list->prev = (new->member);           //3.
    (new->member)->next = list;           //4.
}

对应于:
1. list.prevnext指向(new->member)
2. prev(new->member)现在是list.prev
3.现在listprev(new->member)
4. (new->member)的下一个是list

如果我顺理成章地流了,他们可能会来过这里。

现在进行说明,这是(据我所知)可能的插入描述。

链表

问题 :毕竟是在头部还是在尾部? 如果后者我在哪里错了?

在上面给出的代码中

struct link {
struct link *prev;
struct link *next;
};

void insert(struct link *prev, struct link *new, struct link *next)
{
prev->next = new;
new->prev = prev;
next->prev = new;
new->next = next;
}

#define LIST_APPEND(member, list, new)    \
insert(list.prev, &(new->member), &list)

这里的insert(struct link *prev, struct link *new, struct link *next)函数在prev节点和下一个节点之间插入一个新节点。

insert()函数中, struct link *prev, struct link *new, struct link *nextstruct link类型的指针变量

在双向链表中,不必在头或尾附加节点。 完全取决于程序员的选择,在双链表中追加新节点的位置。

暂无
暂无

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

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