【LeetCode】2.Add Two Numbers两个单链表相加
来源:互联网 发布:深信服广域网优化 编辑:程序博客网 时间:2024/05/29 12:22
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
Input: (9->9) + (1)
Output: 0->0->1
该题要求考虑进位。测试用例:链表长度不相等时;最后一次相加有进位时等。
注意: 如何new一个新的链表节点;设置p指针时不能少了*号;->的使用,而不是用 . 。
/** * 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* p1 = l1; ListNode* p2 = l2; ListNode* l3 = new ListNode(0); ListNode* p3 = l3; int carry = 0;//进位 while(p1 != NULL || p2 != NULL){ //只要还有一个链表不为空,就计算sum;而且不要去判断p1->next是不是为空! int sum = 0; //还有种不用谢carry的写法:while外面写int sum=0;里面写sum /= 10; if(p1 != NULL){ sum += p1->val; p1 = p1->next; } if(p2 != NULL){ sum += p2->val; p2 = p2->next; } sum += carry; carry = sum/10; p3->next = new ListNode(sum % 10); p3 = p3->next; } if(carry == 1){//最后一个值还要进位 p3->next = new ListNode(1); } return l3->next; //return l3; //错误结果为[0,7,0] }};
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* l3 = new ListNode(0); ListNode* p = l3; int carry = 0; //进位 while(l1 || l2 || carry){ //l1、l2、进位均不为空时 int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;//如果l1不空取当前val值,否则赋值为0 carry = sum/10; p->next = new ListNode(sum%10); p = p->next; l1 = l1 ? l1->next : l1; //如果l1不空往下移,否则不移动 l2 = l2 ? l2->next : l2; } return l3->next; }};
0 0
- 【LeetCode】2.Add Two Numbers两个单链表相加
- leetcode Add Two Numbers 两个数相加
- (leetcode)2. 两个链表相加Add Two Numbers--Java
- LeetCode 2 : Add Two Numbers ---- 单链表相加
- LeetCode Add Two Numbers两个链表数值相加
- LeetCode | Add Two Numbers(两个链表相加)
- LeetCode 2. Add Two Numbers -- 两个链表按序从头到尾相加,记录进位
- add-two-numbers(单链表相加)
- 2. Add Two Numbers(两个大数相加)
- Add Two Numbers 两个数字相加
- LeetCode 2. Add Two Numbers(两数相加)
- LeetCode-2. Add Two Numbers(链表实现数字相加)
- [leetcode] 2. Add Two Numbers(链表、大数相加)
- Add Two Numbers Leetcode 链表相加
- Leetcode Add two numbers链表相加
- [Leetcode]Add Two Numbers链表数相加
- 【LeetCode】链表相加 Add Two Numbers
- Add Two Numbers 把两个以链表形式表示的数相加 @LeetCode
- SSM搭建总结
- 微信小程序循环赋值坑
- 使用脚本拷贝官方的 Material Design 图标到自己的 Android App 项目
- Springboot @RequestBody + Retrofit @Body 之实体类字段含有日期Date类型的提交方式
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- 【LeetCode】2.Add Two Numbers两个单链表相加
- gcc LD_LIBRARY_PATH和LIBRARY_PATH区别
- 复数类
- 152.n1-使用ViewPager实现引导页
- Learn Emacs in 21 Days: day 5 学习笔记
- linux 之 用户管理(新增用户与删除)
- 输出/输入重导向
- 基于MPU6050制作姿态控制外设
- Mysql 引擎介绍和选择