LeetCode之Add Two Numbers

来源:互联网 发布:万网二手域名交易平台 编辑:程序博客网 时间:2024/06/15 23:20

一、题目

You are given two linked lists representing two non-negative numbers. 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.

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

二、考虑过程

两个列表逐个节点相加,遍历过程类似于归并。1、可以以短列表为基础,先将短列表长度遍历完,再单独将长列表多余部分比例;2、以长列表为基础,加以判断短列表长度不够。
归并算法
另一个需要注意:进位问题

三、代码

/** * 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) {        int carry = 0;        ListNode* ll = new ListNode(0);        ListNode* head = ll;        while(l1!=NULL || l2!=NULL){   //||以长为限制,&&以短为限制            int val1 = 0;            if(l1!=NULL){               //加以判断                val1 = l1->val;                l1 = l1->next;            }            int val2 = 0;            if(l2!=NULL){                //加以判断                val2 = l2->val;                l2 = l2->next;            }            int temp = val1+val2+carry;            ll->next = new ListNode(temp%10);            carry = temp/10;            ll = ll->next;        }        if(carry>=1){            ll->next = new ListNode(carry);        }        return head->next;    }};
0 0
原创粉丝点击