算法练习:Add Two Numbers
来源:互联网 发布:淘宝的企业店铺卖手机 编辑:程序博客网 时间:2024/06/06 13:03
题目链接: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; } 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; }
0 0
- 算法练习:Add Two Numbers
- 算法练习(1):Add Two Numbers
- Add Two Numbers算法
- leetcode练习 Add Two Numbers
- 【LeetCode算法练习(C语言)】Add Two Numbers
- [编程练习][Add Two Numbers]<LeetCode-2>
- 算法练习2.Add Two Numbers 反向小数链表表示相加
- 每日算法之四:Add Two Numbers
- 算法——Add Two Numbers
- LeetCode算法题2:Add Two Numbers
- 【LetCode 算法修炼】Add Two Numbers
- leetcode算法训练#2 Add Two Numbers
- LeetCode算法分析2.Add Two Numbers
- LeetCode算法--2、Add Two Numbers
- 算法系列——Add Two Numbers
- Add Two Numbers(算法分析week1)
- 15算法课程 2. Add Two Numbers
- 算法第二周Add Two Numbers[medium]
- shell 脚本nginx日志分割
- AutoLayout android studio
- 33. Search in Rotated Sorted Array
- Postgresql数据库DETAIL: Key (irecordid)=(25) already exists.
- 解决:Error:Connection timed out: connect. If you are behind an HTTP proxy, please configure the proxy
- 算法练习:Add Two Numbers
- 【Linux】Linux中Swap与Memory内存简单介绍
- eclipse项目乱码问题
- 常用socket函数详解
- Swift protocol协议
- C++11特性维基百科总结
- 485. Max Consecutive Ones
- 腾讯QQ使用何种开发平台
- JavaScript 中的 HTTP 跨域请求