繁体   English   中英

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

[英]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.

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