@@ -67,3 +67,72 @@ func getLength(l *ListNode) int {
67
67
}
68
68
return count
69
69
}
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