鄙人不才,故收录LeetCode中的解法和代码。
题目:
参考解法:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode preHead(0), *p = &preHead;int extra = 0;while (l1 || l2 || extra) {int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra;extra = sum / 10;p->next = new ListNode(sum % 10);p = p->next;l1 = l1 ? l1->next : l1;l2 = l2 ? l2->next : l2;}return preHead.next;}
};
分析:这里主要有两个问题,一个是两个链表长度不一致时的处理,一个是相加>10时的数据处理。
- 参考解法中运用三目运算符,很好地解决了第一个问题。即长度不一致时,比较短的那个链表用空来表示,数据为0。
- 进位和结果位,分别用/和%运算得到。