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) } }