From 9790a5d6c5b51de769d68f6dfcca70719385df45 Mon Sep 17 00:00:00 2001 From: Jason Staten Date: Fri, 14 Oct 2022 20:34:07 -0600 Subject: [PATCH] delete middle --- deletemiddle/deletemiddle.go | 42 ++++++++++++++++++++++++++++ deletemiddle/deletemiddle_test.go | 46 +++++++++++++++++++++++++++++++ deletemiddle/readme.md | 0 3 files changed, 88 insertions(+) create mode 100644 deletemiddle/deletemiddle.go create mode 100644 deletemiddle/deletemiddle_test.go create mode 100644 deletemiddle/readme.md diff --git a/deletemiddle/deletemiddle.go b/deletemiddle/deletemiddle.go new file mode 100644 index 0000000..623aea7 --- /dev/null +++ b/deletemiddle/deletemiddle.go @@ -0,0 +1,42 @@ +package deletemiddle + +type ListNode struct { + Val int + Next *ListNode +} + +func length(node *ListNode) int { + length := 0 + for node != nil { + length++ + node = node.Next + } + + return length +} + +func nth(node *ListNode, n int) *ListNode { + for i := 0; i < n; i++ { + node = node.Next + } + + return node +} + +func deleteMiddle(head *ListNode) *ListNode { + length := length(head) + if length <= 1 { + return nil + } + + midIndex := length / 2 + preceeding := nth(head, midIndex-1) + preceeding.Next = preceeding.Next.Next + + return head +} + +func Delete(head *ListNode) *ListNode { + return deleteMiddle(head) + +} diff --git a/deletemiddle/deletemiddle_test.go b/deletemiddle/deletemiddle_test.go new file mode 100644 index 0000000..e62a783 --- /dev/null +++ b/deletemiddle/deletemiddle_test.go @@ -0,0 +1,46 @@ +package deletemiddle_test + +import ( + "testing" + + dm "git.jxs.me/leetgo/deletemiddle" + "github.com/stretchr/testify/require" +) + +func buildList(values []int) *dm.ListNode { + var result *dm.ListNode + + for i := len(values) - 1; i >= 0; i-- { + result = &dm.ListNode{Val: values[i], Next: result} + } + + return result +} + +func TestEmpty(t *testing.T) { + var head *dm.ListNode + require.Nil(t, dm.Delete(head)) +} + +func TestOne(t *testing.T) { + head := buildList([]int{1}) + require.Nil(t, dm.Delete(head)) +} + +func TestTwo(t *testing.T) { + head := buildList([]int{2, 1}) + expected := buildList([]int{2}) + require.Equal(t, expected, dm.Delete(head)) +} + +func TestFour(t *testing.T) { + head := buildList([]int{1, 2, 3, 4}) + expected := buildList([]int{1, 2, 4}) + require.Equal(t, expected, dm.Delete(head)) +} + +func TestExample1(t *testing.T) { + head := buildList([]int{1, 3, 4, 7, 1, 2, 6}) + expected := buildList([]int{1, 3, 4, 1, 2, 6}) + require.Equal(t, expected, dm.Delete(head)) +} diff --git a/deletemiddle/readme.md b/deletemiddle/readme.md new file mode 100644 index 0000000..e69de29