为了账号安全,请及时绑定邮箱和手机立即绑定

如何更新go列表中的下一个指针?

如何更新go列表中的下一个指针?

Go
www说 2021-09-10 20:50:36
我有一个来自列表的节点指针。我想用列表中的下一个节点更新值和下一个指针。这只不过是就地删除,只允许访问该指针。例如 3 -> 5 -> 8 -> 9 要删除的节点:5(只允许访问 5 个。假设前一个节点未知)在这种情况下,节点 [8] 的值和下一个指针可以复制到节点 [5]。我有以下代码。它不是删除元素。如果我尝试使用“next”关键字访问下一个指针,则会引发错误。package mainimport (    "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)    }}//ERRORfunc 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}有人可以帮我解决这个问题吗?
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您得到的(第一个)错误是:

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{}


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信