尾部元素未插入 Golang 链表的最后

我在 Golang 中有一个双向链表。就是这个


type node struct {

    value string

    next  *node

    prev  *node

}


type list struct {

    head   *node

    tail   *node

    length int

}

我想在列表的最后插入元素。所以我需要做三件事:

-- 改变当前Last的下一个指针

-- 改变新节点的prev指针

-- 将新节点指向 nil

我做的完全一样,但是 prev 指针似乎没有指向前一个最后一个节点,因为它没有从后面打印出来。你能发现问题吗?我在最后添加了“粉红色”这个词。这是它的功能。

func (listReceiver *list) insertLast(incomingValue string) {

    printNewLine := fmt.Println

    newNode := node{value: incomingValue}


    currentNode := listReceiver.head


    if listReceiver.head == nil {

        listReceiver.head = &newNode

        listReceiver.tail = &newNode

        fmt.Printf("New head -- %s", listReceiver.head.value)

        printNewLine()

        listReceiver.length++

    } else {

        for currentNode.next != nil {

            printNewLine(currentNode.value)

            currentNode = currentNode.next

        }


        currentNode.next = &newNode

        newNode.next = nil

        newNode.prev = currentNode


        fmt.Printf("New Tail -- %s ", newNode.value)

        printNewLine()

        listReceiver.length++

    }


}


这些是打印语句


Linked List From Front -- 

->R->Kanak->Z->Zubin->A->Nani->US->Arjun->Pink


Linked List From Tail -- 

->Arjun->US->Nani->A->Zubin->Z->Kanak->R


Qyouu
浏览 94回答 1
1回答

茅侃侃

编辑----您已经有了列表的尾部,无需使用for currentNode.next != nil {}. 只需将tail.next和list.tail指向 newNode。在 else 块中你需要设置listReceiver.tail = &newNode在任何情况下listReceiver.tail = &newNode都应设置为可以在if-else块外
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go