@@ -32,6 +32,22 @@ Output: 7 -> 8 -> 0 -> 7
3232
3333package leetcode
3434
35+ /* *
36+ * Definition for singly-linked list.
37+ * type ListNode struct {
38+ * Val int
39+ * Next *ListNode
40+ * }
41+ */
42+ package leetcode
43+
44+ import (
45+ " github.com/halfrost/LeetCode-Go/structures"
46+ )
47+
48+ // ListNode define
49+ type ListNode = structures.ListNode
50+
3551/* *
3652 * Definition for singly-linked list.
3753 * type ListNode struct {
@@ -93,6 +109,75 @@ func getLength(l *ListNode) int {
93109 return count
94110}
95111
112+ func addTwoNumbers1 (l1 *ListNode , l2 *ListNode ) *ListNode {
113+ reservedL1 := reverseList (l1)
114+ reservedL2 := reverseList (l2)
115+
116+ dummyHead := &ListNode{}
117+ head := dummyHead
118+ carry := 0
119+ for reservedL1 != nil || reservedL2 != nil || carry > 0 {
120+ val := carry
121+ if reservedL1 != nil {
122+ val = reservedL1.Val + val
123+ reservedL1 = reservedL1.Next
124+ }
125+ if reservedL2 != nil {
126+ val = reservedL2.Val + val
127+ reservedL2 = reservedL2.Next
128+ }
129+ carry = val / 10
130+ head.Next = &ListNode{Val: val % 10 }
131+ head = head.Next
132+ }
133+ return reverseList (dummyHead.Next )
134+ }
135+
136+ func reverseList (head *ListNode ) *ListNode {
137+ var prev *ListNode
138+ for head != nil {
139+ tmp := head.Next
140+ head.Next = prev
141+
142+ prev = head
143+ head = tmp
144+ }
145+ return prev
146+ }
147+
148+ func addTwoNumbers (l1 *ListNode , l2 *ListNode ) *ListNode {
149+ stack1 := pushStack (l1)
150+ stack2 := pushStack (l2)
151+
152+ dummyHead := &ListNode{}
153+ head := dummyHead
154+ carry := 0
155+ for len (stack1) > 0 || len (stack2) > 0 || carry > 0 {
156+ val := carry
157+ if len (stack1) > 0 {
158+ val = val + stack1[len (stack1)-1 ]
159+ stack1 = stack1[:len (stack1)-1 ]
160+ }
161+ if len (stack2) > 0 {
162+ val = val + stack2[len (stack2)-1 ]
163+ stack2 = stack2[:len (stack2)-1 ]
164+ }
165+ carry = val / 10
166+ tmp := head.Next
167+ head.Next = &ListNode{Val: val % 10 , Next: tmp}
168+ }
169+ return dummyHead.Next
170+ }
171+
172+ func pushStack (l *ListNode ) []int {
173+ var stack []int
174+ for l != nil {
175+ stack = append (stack, l.Val )
176+ l = l.Next
177+ }
178+ return stack
179+ }
180+
96181```
97182
98183
0 commit comments