相关疑难解决方法(0)

当指向前一个节点的指针不可用时,从单个链表中删除中间节点

当我们可用的唯一信息是指向要删除的节点的指针而不是指向前一节点的指针时,是否可以删除单个链表中的中间节点?删除后,前一节点应指向旁边的节点删除节点.

c linked-list data-structures

40
推荐指数
5
解决办法
6万
查看次数

为什么sys/queue.h中的双向链表保持前一个下一个元素的地址?

我正在sys/queue.h从FreeBSD 学习,我有一个问题:

In sys/queue.h,LIST_ENTRY定义如下:

#define LIST_ENTRY(type)                        \
struct {                                \
    struct type *le_next;   /* next element */          \
    struct type **le_prev;  /* address of previous next element */  \
}
Run Code Online (Sandbox Code Playgroud)

为什么会维持之前的下一个元素的地址(struct type **le_prev),而不是简单地以前elmentstruct type *le_prev

c queue bsd struct doubly-linked-list

8
推荐指数
1
解决办法
1282
查看次数

将 nil 分配给指针

我正在尝试对列表实施 delete() 方法(没有 HEAD ref)

我发现我可以将参数修改为结构体。

func (l *LinkedList) Delete(n *Node) {
    if n.next == nil {
        n = nil
    } else {
        current := &n
        *n = *n.next
        *current = nil
    }

}
Run Code Online (Sandbox Code Playgroud)

“else”部分工作正常,但删除最后一个节点不会修改列表

尝试使用

*n = nil
Run Code Online (Sandbox Code Playgroud)

但后来我有编译错误。

不能在赋值中使用 nil 作为 Node 类型

在这个操场上完成的代码:

http://play.golang.org/p/Dhzyd7QHEw

pointers go

3
推荐指数
1
解决办法
5449
查看次数