Files
leetcode/data-structure/ds-list_test.go
T
2026-07-20 19:57:25 +08:00

87 lines
1.7 KiB
Go

package ds
import "testing"
func TestLinkedListPushDelete(t *testing.T) {
l := NewLinkedList[int]()
if !l.Empty() {
t.Fatal("新建应为空")
}
l.PushBack(2)
l.PushBack(3)
l.PushFront(1)
l.PushFront(0)
// 期望 [0,1,2,3]
got := l.ToSlice()
want := []int{0, 1, 2, 3}
for i := range want {
if got[i] != want[i] {
t.Fatalf("ToSlice[%d] = %d, want %d", i, got[i], want[i])
}
}
// 删中间
if !l.Delete(2) {
t.Fatal("Delete(2) 应成功")
}
if l.Delete(99) {
t.Fatal("Delete(99) 不应成功")
}
// 删头部
if !l.Delete(0) {
t.Fatal("Delete(0) 应成功")
}
// 删尾部
if !l.Delete(3) {
t.Fatal("Delete(3) 应成功")
}
got = l.ToSlice()
if len(got) != 1 || got[0] != 1 {
t.Fatalf("删完后剩 %v, want [1]", got)
}
// 删到空,验证 tail 回到 head
if !l.Delete(1) {
t.Fatal("Delete(1) 应成功")
}
if !l.Empty() {
t.Fatal("应为空")
}
}
func TestLinkedListReverse(t *testing.T) {
l := NewLinkedList[string]()
for _, s := range []string{"a", "b", "c", "d"} {
l.PushBack(s)
}
l.Reverse()
got := l.ToSlice()
want := []string{"d", "c", "b", "a"}
for i := range want {
if got[i] != want[i] {
t.Fatalf("Reverse[%d] = %q, want %q", i, got[i], want[i])
}
}
// 反转空表不应 panic
l2 := NewLinkedList[int]()
l2.Reverse()
if !l2.Empty() {
t.Fatal("空表反转后应仍为空")
}
}
func TestLinkedListSingleNode(t *testing.T) {
l := NewLinkedList[int]()
l.PushBack(42)
if l.Len() != 1 {
t.Fatalf("Len = %d, want 1", l.Len())
}
if !l.Delete(42) {
t.Fatal("Delete 单节点应成功")
}
// 删空后再次 PushBack,验证 tail 指针正确
l.PushBack(7)
if got := l.ToSlice(); len(got) != 1 || got[0] != 7 {
t.Fatalf("删空后再插 = %v, want [7]", got)
}
}