[LeetCode] Add Two Numbers
The idea is to add the two numbers (represented by linked lists) nodes after nodes and store the result in the longer list. Since we may append the additioanl carry bit after the longer list, we need to be careful not to reach the NULL
pointer of the longer list.
The code is as follows. In fact, it is of time O(length(l1) + length(l2))
(the two calls oflistLength
) and includes two-pass, but it is very fast in the OJ :-)
The code is as follows, about 20 lines. You may run it on the following examples and then you will understand the details of the code.
1 class Solution { 2 public: 3 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 4 if (listLength(l1) < listLength(l2)) 5 return addTwoNumbers(l2, l1); 6 ListNode *r1 = l1, *r2 = l2; 7 int c = 0; 8 bool isEnd = false; 9 while (r2) { 10 int val = r1 -> val + r2 -> val + c; 11 r1 -> val = val % 10; 12 c = val / 10; 13 if (r1 -> next) r1 = r1 -> next; 14 else isEnd = true; 15 r2 = r2 -> next; 16 } 17 while (c) { 18 int val = isEnd ? c : r1 -> val + c; 19 if (isEnd) r1 -> next = new ListNode(val % 10); 20 else r1 -> val = val % 10; 21 c = val / 10; 22 if (r1 -> next) r1 = r1 -> next; 23 else isEnd = true; 24 } 25 return l1; 26 } 27 private: 28 int listLength(ListNode* head) { 29 return head ? 1 + listLength(head -> next) : 0; 30 } 31 };
Examples:
l1 = 5 -> NULL, l2 = 5 -> NULL
;l1 = 1 -> NULL, l2 = 9 -> 9 -> NULL
;l1 = 8 -> 9 -> NULL, l2 = 1 - >NULL
.
Well, you guess what? Yeah, these are just the test cases which my code gives mistake before the debugging :-)
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步