Menu
CoddyTech

回顾:链表构建器

本课属于 Coddy GO 学习旅程的“面向对象编程”单元。第 24 课,共 107 课。

challenge icon

挑战

简单

让我们从头开始构建一个链表!你将创建一种数据结构,其中每个节点都指向下一个节点,在内存中形成一串相连的值。

你将把代码组织在两个文件中:

  • linkedlist.go:定义一个 Node 结构体,其中包含 Value(int)和 Next(*Node)字段。创建一个 LinkedList 结构体,其中保存一个指向 Head 节点的指针。在 *LinkedList 上实现以下方法:
    • Append:将一个包含给定值的新节点添加到列表末尾
    • Prepend:将一个包含给定值的新节点添加到列表开头
    • Print:遍历列表,打印所有值,值之间用 -> 分隔,并以 nil 结尾
  • main.go:从输入中读取值,通过追加和前置节点来构建链表,然后打印最终的链表结构。

将提供以下输入:

  • 第 1 行:要追加的第一个值
  • 第 2 行:要追加的第二个值
  • 第 3 行:要前置的值

你的 Print 方法应按以下格式输出链表:

[value1] -> [value2] -> [value3] -> nil

例如,给定 10、20 和 5,你的输出应为:

5 -> 10 -> 20 -> nil

Append 方法需要先遍历到列表末尾(此处 Next 为 nil),再添加新节点。Prepend 方法应创建一个新节点,将它的 Next 指向当前头节点,然后把头节点更新为这个新节点。请记住,空列表的头节点是 nil,因此要在 Append 方法中处理这种情况。

亲手试试

package main

import "fmt"

func main() {
	// 读取输入值
	var val1, val2, val3 int
	fmt.Scanln(&val1)
	fmt.Scanln(&val2)
	fmt.Scanln(&val3)

	// 创建一个新的链表
	list := &LinkedList{}

	// TODO:使用 Append 将 val1 和 val2 添加到列表中

	// TODO:使用 Prepend 将 val3 添加到列表开头

	// TODO:打印最终的列表结构
}

面向对象编程中的所有课

自己练习: Go 在线编译器