LeetCode2 Add Two Numbers
2015-12-12 21:23
274 查看
题目链接:
https://leetcode.com/problems/add-two-numbers/题目描述:
给两个链表,代表两个非负数。逆序存储在链表节点中,例如(2 -> 4 -> 3)代表342。将两个数相加,即两个链表相加。
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
分析:
水题,其实就是链表的大数加法。诶,但是犯了几个小错误。ptr1->val = (ptr1->val + ptr2->val + num) % 10; ptr2->val = (ptr1->val + ptr2->val + num) % 10;
这样写是不对的,第一行代码已经将ptr1->val的值改变了,第二行是用改变之后的ptr1->val在计算。
嗯~~~QAQ代码有点冗余,等我考完试再想想能不能改改。T-T
代码:
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* ptr1=l1; ListNode* ptr2=l2; int cnt=0; int num=0; ListNode* ptr1_pre=l1; ListNode* ptr2_pre=l2; while(ptr1 && ptr2){ num=cnt; cnt=(ptr1->val+ptr2->val+cnt)/10; int val1=(ptr1->val+ptr2->val+num)%10; int val2=(ptr1->val+ptr2->val+num)%10; ptr1->val=val1; ptr2->val=val2; ptr1_pre=ptr1; ptr2_pre=ptr2; ptr1=ptr1->next; ptr2=ptr2->next; } if(ptr1){ while(ptr1){ if(cnt){ num=cnt; cnt=(ptr1->val+cnt)/10; ptr1->val=(ptr1->val+num)%10; } ptr1_pre=ptr1; ptr1=ptr1->next; } if(cnt){ ListNode* pNew=(ListNode*)malloc(sizeof(ListNode)); pNew->val=cnt; pNew->next=NULL; ptr1_pre->next=pNew; } return l1; } else if(ptr2){ while(ptr2){ if(cnt){ num=cnt; cnt=(ptr2->val+cnt)/10; ptr2->val=(ptr2->val+num)%10; } ptr2_pre=ptr2; ptr2=ptr2->next; } if(cnt){ ListNode* pNew=(ListNode*)malloc(sizeof(ListNode)); pNew->val=cnt; pNew->next=NULL; ptr2_pre->next=pNew; } return l2; } else{ if(cnt){ ListNode* pNew=(ListNode*)malloc(sizeof(ListNode)); pNew->val=cnt; pNew->next=NULL; ptr1_pre->next=pNew; } return l1; } } };
相关文章推荐
- [C/C++]反转链表
- 网络路由技术及运用2
- 获取免费的Camtasia Studio 2使用授权
- C#实现基于链表的内存记事本实例
- 选择模式 - XSL教程 - 2
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- JS Common 2 之比较常用到的函数第1/3页
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)
- C语言实现输出链表中倒数第k个节点