From 4598d396db0a108405dd2f97dcf0ca66645d7b22 Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Mon, 22 Nov 2021 22:45:57 -0600 Subject: [PATCH] defined max --- list/list.go | 18 +++++++++++++++++- list/list_test.go | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/list/list.go b/list/list.go index 51ad06b..3ac4b8b 100644 --- a/list/list.go +++ b/list/list.go @@ -3,6 +3,7 @@ package list import ( "strings" "sync" + "constraints" "fmt" ) @@ -130,9 +131,24 @@ func (l List[T]) Iter() Iter[T] { return &iter[T]{n: l.head} } +func Max[T constraints.Ordered](l List[T]) T { + if l.Empty() { + var v T + return v + } + + v := l.head.val + for n := l.head.next; n != nil; n = n.next { + if n.val > v { + v = n.val + } + } + return v +} + // This doesn't work but I wish it did: // -// func (l List[T comparable]) Max() T { +// func (l List[T Ordered]) Max() T { // if l.Empty() { // var v T // return v diff --git a/list/list_test.go b/list/list_test.go index a8d1cf5..0bd7e0d 100644 --- a/list/list_test.go +++ b/list/list_test.go @@ -110,6 +110,7 @@ func TestMap(t *testing.T) { eq(t, 20, nums.At(1)) eq(t, 30, nums.At(2)) eq(t, 0, nums.At(3)) + eq(t, 30, Max(nums)) } func TestIter(t *testing.T) {