LeetCode 2. Add Two Numbers[Medium]
来源:互联网 发布:声音可爱的网络歌手 编辑:程序博客网 时间:2024/06/05 11:19
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.
对于给定两个非空链表代表两个整数。链表中位数为逆序排列,每个节点值为0-9数字。将两个整数求和并作为链表返回。
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8
错误解法:先整数求和,再存入链表。
问题:整数大小越界。
/** * 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 a = 0; int b = 0; int sum = 0; int count = 1; ListNode *head, *p; do { a += l1->val * count; count = count * 10; l1 = l1->next; }while(l1); count = 1; do { b += l2->val * count; count = count * 10; l2 = l2->next; }while(l2); sum = a + b; head = new ListNode(0); //head->next = NULL; p = head; do { ListNode *r = new ListNode(0); r->val = sum % 10; r->next = NULL; p->next = r; p = p->next; sum = sum / 10; }while(sum); return head->next; }};
正确个人解法:
不足:代码不简洁
/** * 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* head = new ListNode(0); ListNode* p = head; while (l1 != NULL || l2 != NULL) { int x = l1 != NULL ? l1->val : 0; int y = l2 != NULL ? l2->val : 0; int sum = carry + x + y; carry = x + y + carry > 9 ? 1 : 0; ListNode* r = new ListNode(0); r->val = sum % 10; r->next = NULL; p->next = r; p = p->next; l1 = l1 != NULL ? l1->next : l1; l2 = l2 != NULL ? l2->next : l2; } if (carry) { ListNode* r = new ListNode(0); r->val = 1; r->next = NULL; p->next = r; p = p->next; } return head->next; }};
最简洁解法:
- 定义简洁
- 堆栈用法简洁;
- 链表赋值简洁;
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;}
阅读全文
0 0
- Leetcode 2. Add Two Numbers (Medium) (cpp)
- 【leetcode】2. Add Two Numbers 【medium】
- LeetCode 2. Add Two Numbers[Medium]
- 【leetcode medium】2. Add Two Numbers
- 2. Add Two Numbers Medium
- 题解——Leetcode 2. Add Two Numbers 难度:Medium
- Leetcode解题笔记 2.Add Two Numbers [Medium]
- <LeetCode><Medium>2 Add Two Numbers
- Leetcode #2 Add Two Numbers(medium)
- Add Two Numbers (Leetcode medium algorithm problem)
- Leetcode OJ 2 Add Two Numbers [Medium]
- week2-leetcode #2-Add two Numbers[Medium]
- Add Two Numbers [Medium]
- Add Two Numbers(medium)
- [Medium]Add Two Numbers
- 2. Add Two Numbers 难度:Medium
- 2. Add Two Numbers(Medium)
- [LeetCode] 002. Add Two Numbers (Medium) (C++/Java/Python)
- Android软键盘弹出,界面整体上移的问题
- 催收需求
- BT5关于修改静态IP及遇到的问题
- Handler实现倒计时的两种方式
- Linux--生产者与消费者
- LeetCode 2. Add Two Numbers[Medium]
- Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解
- cocos creator从零开始做酷跑小游戏 | 前言以及资源
- numpy笔记---random
- (4)Centos6.X升级Python为2.7版本并安装Pip
- Python基础-函数参数
- Spring MVC + Mbatis + RabbitMQ 整合(1)
- mysql api编程(二)
- 文件的下载