面试题 02.05. 链表求和
2023-09-14 09:06:52 时间
面试题 02.05. 链表求和
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
示例:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?
示例:
输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912
今天,我们写一个链表求和,说句实在的,这题思路简单但是代码比较复杂,自己代码写的也是挺复杂,解题代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int r=0;
struct ListNode* pre,*p=l1;
while(l1&&l2){
l1->val=l1->val+l2->val+r;
r=0;
if(l1->val>=10){
r=1;
l1->val=l1->val-10;
}
pre=l1;
l1=l1->next;
l2=l2->next;
}
if(l1==NULL&&l2==NULL&&r==1){
struct ListNode* s=(struct ListNode* )malloc(sizeof(struct ListNode));
s->next=NULL;
s->val=1;
pre->next=s;
}
if(l1!=NULL){
if(r==1){
while(l1->val==9){
l1->val=0;
pre=l1;
l1=l1->next;
if(l1==NULL){
struct ListNode* s=(struct ListNode* )malloc(sizeof(struct ListNode));
s->next=NULL;
s->val=1;
pre->next=s;
break;
}
}
if(l1!=NULL){
l1->val=l1->val+1;
}
}
}
// printf("%d ",r);
if(l1==NULL&&l2!=NULL){
pre->next=l2;
printf("%d ",r);
if(r==1){
while(l2->val==9){
l2->val=0;
pre=l2;
l2=l2->next;
if(l2==NULL){
struct ListNode* s=(struct ListNode* )malloc(sizeof(struct ListNode));
s->next=NULL;
s->val=1;
pre->next=s;
break;
}
}
if(l2!=NULL){
l2->val=l2->val+1;
}
}
}
return p;
}
相关文章
- PHP面试题整理
- 程序员 面试题【前端,java,php】
- (剑指Offer)面试题26:复杂链表的复制
- (剑指Offer)面试题13:在O(1)时间内删除链表结点
- (剑指Offer)面试题15:链表中倒数第k个结点
- JavaScript数组的常用方法总结:遍历,复制,反转,排序,添加,删除(前端常见面试题必考必问)实例演示
- 2022最新Android 大厂高频面试题解析大全(持续更新中~)下载超10W+
- 常见Java面试题之解释内存中的栈、堆和静态区用法
- 面试题 04.03. 特定深度节点链表-二叉树中序遍历反转
- 如何回答华为公司面试题一头牛重800公斤一座桥承重700公斤问牛怎么过桥?
- C++面试题(四)——智能指针的原理和实现
- SpringCloud面试题及答案