Day80 | 灵神 | 反转链表 翻倍以链表形式表示的数字

2816.翻倍以链表形式表示的数字

2816. 翻倍以链表形式表示的数字 - 力扣(LeetCode)

思路:

看做是两个head相加就直接转变为昨天写的两数相加II了

2. 两数相加 - 力扣(LeetCode)

445. 两数相加 II - 力扣(LeetCode)

Day79 | 灵神 | 反转链表 两数相加 两数相加II | Darlingの妙妙屋

Day79 | 灵神 | 反转链表 两数相加 两数相加II-CSDN博客

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution {
public:
//反转链表
ListNode* reverseList(ListNode* head) {
ListNode *p=head;
ListNode *pre=nullptr;
while(p!=nullptr)
{
ListNode* q=p->next;
p->next=pre;
pre=p;
p=q;
}
return pre;
}
//两数相加的代码
ListNode* addtwo(ListNode* l1, ListNode* l2) {
//建立虚拟头结点
ListNode res;
ListNode *cur=&res;
//记录进位
int carry=0;
//只要l1 l2 或者carry有一个不为0 那就是要继续循环
while(l1 || l2 || carry)
{
//l1不为空 加上l1的值
if(l1)
{
carry+=l1->val;
l1=l1->next;
}
//l2不为空 加上l2的值
if(l2)
{
carry+=l2->val;
l2=l2->next;
}
//在创建为下一个结点
cur->next=new ListNode(carry%10);
cur=cur->next;
//新的进位 大于10就是1,小于10就是0
carry/=10;
}
return res.next;
}
//反转链表+两数相加=两数相加II
ListNode* doubleIt(ListNode* head) {
auto l1=reverseList(head);
auto l2=addtwo(l1,l1);
return reverseList(l2);
}
};