Sfoglia il codice sorgente

Adding solution for 002 in Go

Vinicius Teshima 1 anno fa
parent
commit
d667d3c918
1 ha cambiato i file con 120 aggiunte e 0 eliminazioni
  1. 120 0
      002-Add_Two_Numbers/main.go

+ 120 - 0
002-Add_Two_Numbers/main.go

@@ -0,0 +1,120 @@
+package main
+
+import (
+	"fmt"
+)
+
+type ListNode struct {
+	Val int
+	Next *ListNode
+}
+
+func (l *ListNode) Print() {
+	var tmp *ListNode = l
+
+	for tmp != nil {
+		fmt.Printf("%v", tmp.Val)
+		tmp = tmp.Next
+	}
+	fmt.Printf("\n")
+}
+
+func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
+	var l1Tmp *ListNode = l1
+	var l2Tmp *ListNode = l2
+	var ret *ListNode = &ListNode{-1, nil}
+	var retTail *ListNode = ret
+	var buf int = 0
+
+	for l1Tmp != nil && l2Tmp != nil {
+		retTail.Val = l1Tmp.Val + l2Tmp.Val
+
+		if buf != 0 {
+			retTail.Val += buf
+		}
+		buf = retTail.Val / 10
+		retTail.Val %= 10
+
+		l1Tmp = l1Tmp.Next
+		l2Tmp = l2Tmp.Next
+
+		if l1Tmp != nil || l2Tmp != nil {
+			retTail.Next = &ListNode{-1, nil}
+			retTail = retTail.Next
+		}
+	}
+
+	for l1Tmp != nil {
+		retTail.Val = l1Tmp.Val
+
+		if buf != 0 {
+			retTail.Val += buf
+			buf = retTail.Val / 10
+			retTail.Val %= 10
+		}
+
+		l1Tmp = l1Tmp.Next
+
+		if l1Tmp != nil {
+			retTail.Next = &ListNode{-1, nil}
+			retTail = retTail.Next
+		}
+	}
+
+	for l2Tmp != nil {
+		if retTail == nil {
+			retTail = &ListNode{-1, nil}
+		}
+		retTail.Val = l2Tmp.Val
+
+		if buf != 0 {
+			retTail.Val += buf
+			buf = retTail.Val / 10
+			retTail.Val %= 10
+		}
+
+		l2Tmp = l2Tmp.Next
+
+		if l2Tmp != nil {
+			retTail.Next = &ListNode{-1, nil}
+			retTail = retTail.Next
+		}
+	}
+
+	if buf != 0 {
+		retTail.Next = &ListNode{buf, nil}
+		retTail = retTail.Next
+	}
+
+	return ret
+}
+
+func arrayToListNode(l []int) *ListNode {
+	var i int = 0
+	var res ListNode = ListNode{l[i], nil}
+	var tmp *ListNode = &res
+	i++
+
+	for ; i < len(l); i++ {
+		tmp.Next = &ListNode{l[i], nil}
+		tmp = tmp.Next
+	}
+
+	return &res
+}
+
+func main() {
+	// tmp11 := ListNode{3, nil}
+	// tmp12 := ListNode{4, &tmp11}
+	// var l1 ListNode = ListNode{2, &tmp12}
+	var l1 *ListNode = arrayToListNode([]int{0})
+	fmt.Printf("l1 => ")
+	l1.Print()
+
+	var l2 *ListNode = arrayToListNode([]int{2, 7, 8})
+	fmt.Printf("l2 => ")
+	l2.Print()
+
+	// fmt.Printf("res => ")
+	addTwoNumbers(l1, l2).Print()
+}