博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode-2-Add Two Numbers]
阅读量:6153 次
发布时间:2019-06-21

本文共 3872 字,大约阅读时间需要 12 分钟。

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

刚开始ac的代码如下:简直是啰嗦到家

就是两个链表从头到尾非空的情况下往前计算

提防着进位等等 还要处理最后一个为空的边界条件

运行效率简直惨不忍睹:先贴这儿。

 

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)    {        int carry = 0;//进位        ListNode* result = l1;        while (l1->next != NULL && l2->next != NULL)        {            l1->val = l1->val + l2->val + carry;                                        if (l1->val >= 10)            {                l1->val -= 10;                carry = 1;            }            else carry = 0;            l1 = l1->next;            l2 = l2->next;        }        l1->val = l1->val + l2->val + carry;        if (l1->val >= 10)        {            l1->val -= 10;            carry = 1;        }        else carry = 0;        if (l1->next == NULL && l2->next == NULL)        {            if (carry == 1)            {                ListNode* newNode = new ListNode(1);                l1->next = newNode;            }        }        else        {                        if (l1->next == NULL &&  l2->next != NULL)//l2非空            {                            l1->next = l2->next;                l1 = l1->next;                while (carry && l1->next!=NULL)                {                    l1->val += carry;                    if (l1->val >= 10)                    {                        l1->val -= 10;                        carry = 1;                    }                    else carry = 0;                    l1 = l1->next;                }                if (carry ==1)//最后一位                {                    l1->val += carry;                    if (l1->val >= 10)                    {                        l1->val -= 10;                        ListNode* newNode = new ListNode(1);//新建结点                        l1->next = newNode;                        carry = 1;                    }                    else carry = 0;                }                            }            else if (l1->next != NULL && l2->next == NULL)            {                                l1 = l1->next;                while (carry && l1->next != NULL)                {                    l1->val += carry;                    if (l1->val >= 10)                    {                        l1->val -= 10;                        carry = 1;                    }                    else carry = 0;                    l1 = l1->next;                }                if (carry == 1)//最后一位                {                    l1->val += carry;                    if (l1->val >= 10)                    {                        l1->val -= 10;                        ListNode* newNode = new ListNode(1);//新建结点                        l1->next = newNode;                        carry = 1;                    }                    else carry = 0;                }            }        }                    return result;    }

简洁到家啊~~~ 如下:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode c1 = l1;        ListNode c2 = l2;        ListNode sentinel = new ListNode(0);        ListNode d = sentinel;        int sum = 0;        while (c1 != null || c2 != null) {            sum /= 10;            if (c1 != null) {                sum += c1.val;                c1 = c1.next;            }            if (c2 != null) {                sum += c2.val;                c2 = c2.next;            }            d.next = new ListNode(sum % 10);            d = d.next;        }        if (sum / 10 == 1)            d.next = new ListNode(1);        return sentinel.next;    }

不光简洁 效率也还过得去

 

 

转载于:https://www.cnblogs.com/hellowooorld/p/6434143.html

你可能感兴趣的文章
OFFICE 2007 序列号
查看>>
07-JAVA继承与接口
查看>>
ubuntu15.10下sublime text3 无法输入中文解决办法
查看>>
LR web_custom_request
查看>>
MySQL-DDL语言
查看>>
Java-笔记10-复习
查看>>
5月10团队博客
查看>>
意见汇总
查看>>
phpcmsv9 幻灯片管理模块_UTF8
查看>>
(转)mysql分表的3种方法
查看>>
对Java单继承的弥补——接口
查看>>
洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器
查看>>
MySQL中优化sql语句查询常用的30种方法
查看>>
.NET CORE实践(1)--Ubuntu下的Hello World
查看>>
1755: [Usaco2005 qua]Bank Interest
查看>>
hive升级注意事项
查看>>
C#---属性和字段
查看>>
COGS1533.[HNOI2002]营业额统计
查看>>
How to reset XiaoMi bluetooth headphone Youth edition.
查看>>
SEOer 的生涯正式开始
查看>>