From b65db3b4f2bf6201c8eec03e5551f881b1c2818b Mon Sep 17 00:00:00 2001 From: Alec Goncharow Date: Fri, 10 Jul 2026 12:32:02 -0400 Subject: words --- twosum/twosum.go | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 twosum/twosum.go (limited to 'twosum/twosum.go') diff --git a/twosum/twosum.go b/twosum/twosum.go new file mode 100644 index 0000000..ca93104 --- /dev/null +++ b/twosum/twosum.go @@ -0,0 +1,112 @@ +package main + +import "fmt" + +type ListNode struct { + Val int + Next *ListNode +} + +func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { + carry := 0 + var output, co *ListNode + c1 := l1 + c2 := l2 + for { + if c1 != nil && c2 != nil { + sum := c1.Val + c2.Val + carry + carry = sum / 10 + rem := sum % 10 + c1.Val = rem + c2.Val = rem + + if c1.Next == nil && c2.Next == nil { + if carry > 0 { + c1.Next = &ListNode{ + Val: 1, + } + carry = 0 + } + } + + c1 = c1.Next + c2 = c2.Next + continue + } + + if c1 != nil { + output = l1 + co = c1 + break + } else if c2 != nil { + output = l2 + co = c2 + break + } else { + + output = l1 + break + } + } + + if co != nil { + for { + sum := co.Val + carry + carry = sum / 10 + rem := sum % 10 + + co.Val = rem + if co.Next == nil { + if carry > 0 { + co.Next = &ListNode{ + Val: 1, + } + } + break + } + co = co.Next + } + } + + return output +} + +func makeList(list []int) *ListNode { + output := &ListNode{ + Val: list[0], + Next: nil, + } + current := output + for _, n := range list[1:] { + node := &ListNode{ + Val: n, + } + current.Next = node + current = node + } + + return output +} + +func printList(node *ListNode) { + for { + if node == nil { + break + } + + fmt.Print(node.Val) + node = node.Next + } + fmt.Println() +} + +func main() { + // Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] + // Output: [8,9,9,9,0,0,0,1] + l1 := makeList([]int{9, 9, 9, 9, 9, 9, 9}) + l2 := makeList([]int{9, 9, 9, 9}) + printList(l1) + printList(l2) + + printList(addTwoNumbers(l1, l2)) +} -- cgit v1.2.3-70-g09d2