链表求和
来源:互联网 发布:高音 知乎 编辑:程序博客网 时间:2024/06/05 18:36
问题描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null
实现思路:由题意整数在链表中的存储是原来整数中相反的顺序,所以考虑申请一个新链表,让原来两个链表对应位置相加,除10取余作为新链表的当前元素,并且要考虑进位,这是总体的思路。在具体写代码的时候,首先考虑特殊情况,两个链表有空链表的情况,这是就相当于对一个链表进行操作就可以。当两个链表都不空时,就是都从头开始遍历,用一个while循环来实现:
(1)开始时先初始化一个变量x作为进位的数字,初始化为0;定义整型变量sum等于两个链表对应位置的数字和前一位的进位的和;
(2)将求得的和sum除10 赋值给x,作为新的要进位的数字;除10取余就是当前位置的元素;
(3)新链表和两个链表的指针后移。重复执行上述操作。
考虑到两个链表有可能不一样长,那么就是遍历完较短链表时就会跳出while循环了,那么这是我们就要继续考虑剩下的那个链表接着遍历的情况。特别注意的还有如果最后一位还要进位的话,那么还要重新申请一个结点,复制以后链接到新链表最后。
实现代码:
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
ListNode *addLists(ListNode *l1, ListNode *l2) {
ListNode *p1=l1;
ListNode *p2=l2;
if(p1==NULL)
return p2;
if(p2==NULL)
return p1;
ListNode *head=new ListNode(0);
ListNode *p3=head;
int x=0;
while(p1!=NULL&&p2!=NULL)
{int sum=p1->val+p2->val+x;
x=sum/10;
sum=sum%10;
ListNode *s=new ListNode(sum);
p3->next=s;
p3=p3->next;
p1=p1->next;
p2=p2->next;
}
while(p1!=NULL)
{int sum=p1->val+x;
x=sum/10;
sum=sum%10;
ListNode *s=new ListNode(sum);
p3->next=s;
p3=p3->next;
p1=p1->next;
}
while(p2!=NULL)
{int sum=p2->val+x;
x=sum/10;
sum=sum%10;
ListNode *s=new ListNode(sum);
p3->next=s;
p3=p3->next;
p2=p2->next;
}
if(x!=0)
{ListNode *s=new ListNode(1);
p3->next=s;
p3=p3->next;
}
return head->next;}
};
做题感想:这个题需要考虑的细节比较多,同时有新链表和原来的两个链表的指针的移动情况需要考虑清楚,还有两个链表不一样长的情况。最后特别要注意最后一位要进位的话,那么还要重新申请一个结点,复制以后链接到新链表最后。
- 链表求和 & 二进制求和
- 链表多项式求和
- 链表求和
- LintCode 链表求和
- 链表求和
- lintcode ----链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- LintCode 链表求和
- 链表求和-LintCode
- 链表求和
- 链表求和
- java基础----算法
- 如何把vim中的内容粘贴到外部
- Unity开发笔记整理
- java动态代理
- Log4j配置详解
- 链表求和
- 彻底搞定Android开发中软键盘的常见问题
- 微信小程序开发:提高应用速度小技巧
- 「这个控件叫什么」系列之加载占位图+页面指示器
- 递推递归练习P二分查找
- JAVA字符串的替换
- Android Notification通知
- Java设计模式系列之迭代器模式
- DXVA硬件加速解码