[英]Lists next to floated elements: How to get list items in the right place?
[英]How to update the next pointer in place in go list?
我有一个列表中的节点指针。 我想用列表中的下一个节点更新值和下一个指针。 这仅是删除,仅允许访问该指针。
例如3-> 5-> 8-> 9要删除的节点:5(只允许访问5。假定先前的节点未知)
在这种情况下,可以将节点[8]的值和下一个指针复制到节点[5]。 我有以下代码。 它没有删除元素。 如果我尝试使用“ next”关键字访问下一个指针,则会引发错误。
package main
import (
"container/list"
"fmt"
)
func main() {
l := list.New()
l.PushFront(4)
l.PushFront(5)
e4 := l.PushFront(7)
l.PushFront(6)
l.PushBack(9)
res := deleteNode(e4)
fmt.Println(res)
for e:=l.Front(); e!=nil;e=e.Next() {
fmt.Println(e.Value)
}
}
//ERROR
func deleteNode(node *list.Element) bool {
if node == nil || node.Next() == nil {
return false
}
var nextNode *list.Element
nextNode := node.next.(*list.Element)
node.Value = node.Next().Value.(int)
nextNode = nextNode.next.(*Element)
return true
}
有人可以帮我吗?
您得到的(第一个)错误是:
no new variables on left side of :=
因为nextNode
已经存在。 问题在于这两行:
var nextNode *list.Element
nextNode := node.next.(*list.Element)
在第一行中,创建变量nextNode
。 在第二行中,您使用了短赋值:=
,它创建了一个新变量(由左侧指定),并在右侧分配了值。 只需省略第一行,您只需要其中之一:
nextNode := node.Next()
此外,您不能读取或更改节点的next
指针,因为next
指针不会在Element
结构中导出(它以小写字母开头)。 因此,您尝试实现的目标无法完成。 但是您为此定义了一个函数: Remove(e *Element) interface{}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.