Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers Go:实现紧急错误的双链表_Pointers_Linked List_Go - Fatal编程技术网

Pointers Go:实现紧急错误的双链表

Pointers Go:实现紧急错误的双链表,pointers,linked-list,go,Pointers,Linked List,Go,更正: 链接#1 链接#2 从第一个环节,, 我确信恐慌性错误来自于此 func (A *DoublyLinkedList) AddHead(input_value interface{}) { temp_node := &Node{value: input_value, prev: nil, next: A.head} original_head_node := A.head original_head_node.prev = temp_node A.length++

更正:

链接#1

链接#2

从第一个环节,, 我确信恐慌性错误来自于此

func (A *DoublyLinkedList) AddHead(input_value interface{}) {
  temp_node := &Node{value: input_value, prev: nil, next: A.head}
  original_head_node := A.head
  original_head_node.prev = temp_node
  A.length++
}
但当我把它用于双链接列表时,它会在不久后恐慌起来。但仍然失败,因为下面这一个未将原始头与上一个指针连接

  func (A *DoublyLinkedList) AddHead(input_value interface{}) {
     A.head = NewNode(input_value, nil, A.head)
     A.length++
  }
就是这个。这一个也有类似的问题

  cannot assign to target_node.GetPrevNode().GetNextNode()
go不支持这样的指针引用吗?我只是在每次需要获取指针时分配一个新变量就解决了这个问题。但是我上面的第一个问题仍然没有编译


简而言之,在Go中添加新元素时,如何连接双链接列表?

您需要初始化双链接列表中的属性。在我看来,您当前正在NewDoublyLinkedList()中创建对它的引用,并具有2个nil属性

type DoublyLinkedList struct {
    head   *Node // nil
    tail   *Node // nil
    length int
}
当你这么做的时候

original_head_node := A.head // A.head == nil
original_head_node.prev = temp_node // You are trying to access a property in nil

对。在需要访问之前,我不知道如何首先初始化nil指针。你说的内部初始化是什么意思?我做这件事的时候就知道分配给零是行不通的。但是我想不出任何正确的方法。请看AddHead方法中的第一行。初始化节点结构的方法应该给出答案。A.head=NewNode(输入值,nil,A.head)。你是说这个吗?这仅适用于单链接列表。我需要处理原始head节点的prev节点。