链表
https://hunterhug.github.io/goa.c/#/algorithm/link
Description
Good
您写的链表中的添加节点,没太看懂,能麻烦写的再详细一点吗
这个循环链表 画了半个小时图, 终于弄明白了;;;;
您写的链表中的添加节点,没太看懂,能麻烦写的再详细一点吗
最近有点忙,我写的添加节点确实是复杂了一点,其实就是把一个节点插到两个节点中间。
这个循环链表 画了半个小时图, 终于弄明白了;;;;
如果觉得太难理解,看看能不能换一种方式来讲诉,如果有好建议,可以clone仓库后修改,提一个Merge.
说实话 go package 里面的Example讲的更直观
在链表添加节点,如果s不是新节点,k也是会被添加到链表的,测试代码如下:
func TestRing_Link(t *testing.T) {
r = New(5)
temp := r
i := 0
for {
temp.Value = i
temp = temp.next
i++
if temp == r {
break
}
}
// 此时循环链表为0 1 2 3 4
p := &Ring{Value: 5}
s := &Ring{Value: 6}
k := &Ring{Value: 7}
p.next = s
p.prev = k
s.prev = p
s.next = k
k.prev = s
k.next = p
// 形成新的循环链表 5 6 7
r.Link(s)
node := r
for {
log.Println(node.Value)
node = node.next
if node == r {
break
}
}
}
打印结果:0 6 7 5 1 2 3 4
在链表添加节点,如果s不是新节点,k也是会被添加到链表的,测试代码如下:
func TestRing_Link(t *testing.T) { r = New(5) temp := r i := 0 for { temp.Value = i temp = temp.next i++ if temp == r { break } } // 此时循环链表为0 1 2 3 4 p := &Ring{Value: 5} s := &Ring{Value: 6} k := &Ring{Value: 7} p.next = s p.prev = k s.prev = p s.next = k k.prev = s k.next = p // 形成新的循环链表 5 6 7 r.Link(s) node := r for { log.Println(node.Value) node = node.next if node == r { break } } }打印结果:0 6 7 5 1 2 3 4
没错,两个循环链表可以连在一起。
说实话 go package 里面的Example讲的更直观
其实链表只是把不同节点链接起来,明白这个道理即可,next, pre这些对于初学者会难以理解,可以多画下图。
对于链表,空间想象能力不够强,一定要多画图才能好理解