delete middle

main
Jason Staten 2 years ago
parent b3b965ba0a
commit 9790a5d6c5

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

@ -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))
}
Loading…
Cancel
Save