@@ -67,3 +67,72 @@ func getLength(l *ListNode) int {
6767 }
6868 return count
6969}
70+
71+ func addTwoNumbers1 (l1 * ListNode , l2 * ListNode ) * ListNode {
72+ reservedL1 := reversedList (l1 )
73+ reservedL2 := reversedList (l2 )
74+
75+ dummyHead := & ListNode {}
76+ head := dummyHead
77+ carry := 0
78+ for reservedL1 != nil || reservedL2 != nil || carry > 0 {
79+ val := carry
80+ if reservedL1 != nil {
81+ val = reservedL1 .Val + val
82+ reservedL1 = reservedL1 .Next
83+ }
84+ if reservedL2 != nil {
85+ val = reservedL2 .Val + val
86+ reservedL2 = reservedL2 .Next
87+ }
88+ carry = val / 10
89+ head .Next = & ListNode {Val : val % 10 }
90+ head = head .Next
91+ }
92+ return reversedList (dummyHead .Next )
93+ }
94+
95+ func reversedList (head * ListNode ) * ListNode {
96+ var prev * ListNode
97+ for head != nil {
98+ tmp := head .Next
99+ head .Next = prev
100+
101+ prev = head
102+ head = tmp
103+ }
104+ return prev
105+ }
106+
107+ func addTwoNumbers (l1 * ListNode , l2 * ListNode ) * ListNode {
108+ stack1 := pushStack (l1 )
109+ stack2 := pushStack (l2 )
110+
111+ dummyHead := & ListNode {}
112+ head := dummyHead
113+ carry := 0
114+ for len (stack1 ) > 0 || len (stack2 ) > 0 || carry > 0 {
115+ val := carry
116+ if len (stack1 ) > 0 {
117+ val = val + stack1 [len (stack1 )- 1 ]
118+ stack1 = stack1 [:len (stack1 )- 1 ]
119+ }
120+ if len (stack2 ) > 0 {
121+ val = val + stack2 [len (stack2 )- 1 ]
122+ stack2 = stack2 [:len (stack2 )- 1 ]
123+ }
124+ carry = val / 10
125+ tmp := head .Next
126+ head .Next = & ListNode {Val : val % 10 , Next : tmp }
127+ }
128+ return dummyHead .Next
129+ }
130+
131+ func pushStack (l * ListNode ) []int {
132+ var stack []int
133+ for l != nil {
134+ stack = append (stack , l .Val )
135+ l = l .Next
136+ }
137+ return stack
138+ }
0 commit comments