我很擅长去实施一个链表。这是我的源代码
Get-ChildItem D:\Company\SAP\JAN\"BSEG"*.txt -recurse | Move-Item -Destination D:\Company\BSEG
输出结果为:
package main
import "fmt"
type Node struct {
value int
next *Node
}
func main() {
var head *Node
for i := 1; i <= 10; i++ {
insert(&head, i)
}
print_list(head)
}
func print_list(node_pointer *Node) {
if (node_pointer == nil) {
return
} else {
node := *node_pointer
fmt.Printf("%d\n", node.value)
print_list(node.next)
}
}
func insert(node_pointer **Node, // pointer to a pointer to a Node
value int) {
var new_node Node
new_node.value = value
if (*node_pointer == nil) {
fmt.Printf("Empty list\n")
*node_pointer = &new_node
} else {
var cur_node Node = **node_pointer
for cur_node.next != nil {
cur_node = *cur_node.next
}
cur_node.next = &new_node
fmt.Printf("Add %d\n", (*cur_node.next).value) }
}
换句话说,我无法在链表的末尾插入新节点。我认为它是由Empty list
Add 2
Add 3
Add 4
Add 5
Add 6
Add 7
Add 8
Add 9
Add 10
1
引起的,它只在本地进行更新,但不知道如何解决这个问题。
答案 0 :(得分:2)
问题在于您的插入功能 - 这是一个更正版本
func insert(node_pointer **Node, // pointer to a pointer to a Node
value int) {
var new_node Node
new_node.value = value
if *node_pointer == nil {
fmt.Printf("Empty list\n")
*node_pointer = &new_node
} else {
var cur_node *Node = *node_pointer
for cur_node.next != nil {
cur_node = cur_node.next
}
cur_node.next = &new_node
fmt.Printf("Add %d\n", (*cur_node.next).value)
}
}
答案 1 :(得分:1)
您的错误是因为您获得了节点值,而不是指针:
var cur_node Node = **node_pointer
*note_pointer
是一个指向列表头部的指针,但您使用的是**node_pointer
,然后获取该值,然后将此值复制到cur_node
,之后将追加新节点至cur_node
,与头节点无关。因此,当您的打印表单头节点时,您只能获取头节点的值。
固定解决方案就像@Nick Craig-Wood所说。