当我们可用的唯一信息是指向要删除的节点的指针而不是指向前一节点的指针时,是否可以删除单个链表中的中间节点?删除后,前一节点应指向旁边的节点删除节点.
我正在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),而不是简单地以前elment样struct type *le_prev?
我正在尝试对列表实施 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 类型
在这个操场上完成的代码: