簡體   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