算法练习:Add Two Numbers
2017-02-24 11:18
423 查看
题目链接:https://leetcode.com/problems/add-two-numbers/?tab=Description
问题描述:
给定两个非空链表,链表中的值均为非负数,数字以相反的顺序存储,每个节点包含一个位数,完成两个链表的加法,返回该结果链表。 假设这两个数字不包含任何前导零,除了数字0本身。
解题思路:
(1)申请一个节点指针result,指向结果链表,另外申请一个节点指针,用于指向该链表。 (2)定义一个变量over,初始化为0。两数之和大于等于10时, over赋值为1。
(3)遍历l1和l2,p指向l1,q指向l2:
a. 当两者均不为空的时候,两数相加,并判断和是否大于等于10,大于等于10,over=1(即向前进一位)。将该和mod10后保存到节 点中。p,q均向后移动一个节点,继续遍历。同时也需要在结果链表后加入一个新的 节点,cur指向该节点。
b. 当p或q等于NULL时(两个链表不等长),将l1或l2剩下的节点链接到result后。
(4)当两个链表均遍历结束之后,若over等于1,即计算到最后的两个数相加满10,有进位,则需要申请一个新的节 点保存over的值,并链接到result后。
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode*result=new ListNode(0); ListNode*cur=result; ListNode*p=l1; ListNode*q=l2; int over=0;//两数之和大于等于10,进1 while(p!=NULL&&q!=NULL){ int sum=p->val+q->val+over; if(sum>=10){ cur->val=sum%10; over=1; } else{ cur->val=sum; over=0; } cur->next=new ListNode(0);//指向cur下一个节点 if(p->next!=NULL&&p->next!=NULL)cur=cur->next; p=p->next; q=q->next; } //链表不等长 while(p!=NULL){ cur->next=p; cur->next->val+=over; p=p->next; cur=cur->next; 4000 } while(q!=NULL){ cur->next=q; cur->next->val+=over; q=q->next; cur=cur->next; } //同等长度,但最后over=1 if(over==1){ cur->next=new ListNode(1); cur=cur->next; } cur->next=NULL; return result; }
相关文章推荐
- [算法练习]Add Two Numbers
- 算法练习(1):Add Two Numbers
- 【LeetCode】算法题2 Add Two Numbers的归纳
- (算法分析Week5)Add Two Numbers[Medium]
- leetcode练习 Add Two Numbers
- leetcode练习 add two numbers
- python写算法题:leetcode: 2. Add Two Numbers
- 算法系列——Add Two Numbers
- 算法题目--Add Two Numbers
- Leetcode练习-两个数字相加(Add two numbers)
- leetcode算法训练#2 Add Two Numbers
- 算法分析与设计week02--2.Add Two Numbers
- 跟我一起学算法系列2---Add Two Numbers(java)
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- LeetCode算法分析2.Add Two Numbers
- 算法——Add Two Numbers
- 【LeetCode002-003算法/编程练习C++】---Add Two Numbers||寻找最长无重复字母子串。//第三题之后有空要再想一想…
- Leetcode# 2. Add Two Numbers(链表模拟大数算法)
- [编程练习][Add Two Numbers]<LeetCode-2>
- leetcode 练习——add two numbers (Java)