Skip to content

Commit 7db2a76

Browse files
committed
Update solution 0445
1 parent 5c0f4f9 commit 7db2a76

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

website/content/ChapterFour/0400~0499/0445.Add-Two-Numbers-II.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,22 @@ Output: 7 -> 8 -> 0 -> 7
3232

3333
package 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

Comments
 (0)