1
skywalkerfc 2023-05-05 14:47:21 +08:00
哪里不明白呢,就是链表的基本操作。
|
2
deplivesb 2023-05-05 14:51:23 +08:00
建议重学数据结构
|
3
OkabeRintaro 2023-05-05 15:08:39 +08:00
这段 Go 代码定义了一个泛型类型 List[T],用于表示一个简单的单向链表数据结构。该数据结构包含两个字段 head 和 tail ,分别表示链表头和尾。每个元素由一个 element[T] 结构体表示,其中 val 字段存储元素的值,next 字段存储指向下一个元素的指针。
该代码还实现了两个方法 Push 和 GetAll 。Push 方法用于在链表末尾添加一个元素,它先判断链表是否为空,如果是,则将新元素赋值给 head 和 tail ;否则,创建一个新元素,将其链接到链表尾部,并更新 tail 的值。GetAll 方法用于返回链表中所有元素的值,它遍历整个链表,将每个元素的值追加到一个切片中,并最终返回该切片。 在 main 函数中,首先创建了一个 List[int] 类型的变量 lst ,然后分别调用 Push 方法将整数 10 、13 、23 添加到链表中,最后调用 GetAll 方法获取链表中所有元素的值,并将结果打印出来。由于添加了三个元素,因此打印的结果为 [10 13 23]。 ---来自 chatGPT |
4
golangLover 2023-05-05 15:17:28 +08:00 via Android 1
@Livid 看一下 3 楼
|
5
lhbc 2023-05-05 15:25:31 +08:00 via Android
一个问题,能用 ChatGPT 或者搜索引擎轻易得到准确答案的
这种问题是否有意义再讨论? |
6
AS4694lAS4808 2023-05-05 15:35:50 +08:00
不会 go ,但是看了前两个类型定义感觉就知道是干什么的了。。
|
7
thereyou OP 各位大姥,抛开链表结构操作逻辑,我想知道的是在这段代码里每次 push 完后是如何保存之前的数据?
|
8
JKeita 2023-05-05 15:58:36 +08:00
@thereyou 这是一个指针链表队列,element 的 Val 保存了值,element 相当于一个节点,Next 指向下一个节点。建议看看数据结构相关。
|
9
JKeita 2023-05-05 16:00:46 +08:00
@thereyou
lst.tail.next = &element[T]{val: v} // 当前尾部指针指向的元素的 Nexit 指针指向新增节点 lst.tail = lst.tail.next // 尾部指针执行新增节点 |
10
thereyou OP @JKeita 所以是 element 结构体字段 next 数据类型是所在结构体的指针类型就表示这是一个指针链表队列
|
11
JKeita 2023-05-05 16:20:38 +08:00
@thereyou
type element[T any] struct { next *element[T] // 前面有*代表 next 字段是一个指针,存储的是 element 的地址 val T } lst.tail.next = &element[T]{val: v} // &代表取得是该实例的地址 |
13
Livid MOD @OkabeRintaro 请不要再把 AI 生成的回复贴到这里。
|
14
zanelee 2023-05-06 18:00:13 +08:00
我知道是 go 上泛型特性的例子,其他我都不懂嘿嘿
|