LeetCode OJ-2.Add Two Numbers

    xiaoxiao2021-03-25  119

    LeetCode OJ-2.Add Two Numbers

    题目描述

    You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    You may assume the two numbers do not contain any leading zero, except the number 0 itself.

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8

    Subscribe to see which companies asked this question.

    题目理解

    ​ 意思就是将两个链表当做两个数相加,链表1的第1个节点和链表2的第1个节点(存储的数值)相加,链表1的第2个节点和链表2的第2个节点相加,依次类推,得到的结果是第3个链表,如题目中例子所述。题目不难,要注意进位,两个链表可能长度不一样,具体需要注意的点代码中给出了注释,具体代码在下方。

    Code

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ void list_add(ListNode **lst, int __x) { if (!(*lst)) { *lst = new ListNode(__x); return ; } else { ListNode *cur = *lst; while (cur->next) { cur = cur->next; } cur->next = new ListNode(__x); return ; } } void list_clear(ListNode **lst) { if (!(*lst)) { return ; } ListNode *tmp = *lst; ListNode *next = tmp->next; while (tmp) { delete tmp; tmp = next; if (tmp) { next = tmp->next; } } } ListNode *add_two_list(ListNode *l1, ListNode *l2) { ListNode *res = 0; ListNode *cur1 = l1; ListNode *cur2 = l2; int cur_sum = 0; int next_sum = 0; while (cur1 || cur2) { // 两个链表长度可能不一样,要分别加到末尾 if (cur1 && cur2) { // 两个链表都未加到末尾 cur_sum = cur1->val + cur2->val + next_sum; next_sum = (cur_sum > 9) ? 1 : 0; cur_sum %= 10; list_add(&res, cur_sum); cur1 = cur1->next; cur2 = cur2->next; } else if (cur1 && !cur2) { // 链表l2已到末尾 cur_sum = cur1->val + next_sum; next_sum = (cur_sum > 9) ? 1 : 0; cur_sum %= 10; list_add(&res, cur_sum); cur1 = cur1->next; } else { // 链表l1已到末尾 cur_sum = cur2->val + next_sum; next_sum = (cur_sum > 9) ? 1 : 0; cur_sum %= 10; list_add(&res, cur_sum); cur2 = cur2->next; } } if (next_sum > 0) { // 两个待相加的链表各自都加到末尾时,要注意进位是否为0 list_add(&res, next_sum); } return res; } class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { return add_two_list(l1, l2); } };
    转载请注明原文地址: https://ju.6miu.com/read-11904.html

    最新回复(0)