diff --git a/go/maximum-twin-sum-of-a-linked-list.go b/go/maximum-twin-sum-of-a-linked-list.go new file mode 100644 index 0000000..e4eb12f --- /dev/null +++ b/go/maximum-twin-sum-of-a-linked-list.go @@ -0,0 +1,27 @@ +package main + +func pairSum(head *ListNode) int { + findMidAndBuild := func() ([]int, *ListNode) { + stack := make([]int, 0) + + slow, fast := head, head + for fast != nil { + stack = append(stack, slow.Val) + slow, fast = slow.Next, fast.Next.Next + } + + return stack, slow + } + + stack, node := findMidAndBuild() + + foundMax, idx := 0, len(stack)-1 + for node != nil { + foundMax = max(foundMax, stack[idx]+node.Val) + + node = node.Next + idx-- + } + + return foundMax +}