给你一个 非空 链表的头节点 head
,表示一个不含前导零的非负数整数。
将链表 翻倍 后,返回头节点 head
。
示例 1:
输入:head = [1,8,9]
输出:[3,7,8]
解释:上图中给出的链表,表示数字 189 。返回的链表表示数字 189 * 2 = 378 。
示例 2:
输入:head = [9,9,9]
输出:[1,9,9,8]
解释:上图中给出的链表,表示数字 999 。返回的链表表示数字 999 * 2 = 1998 。
提示:
- 链表中节点的数目在范围
[1, 104]
内 0 <= Node.val <= 9
- 生成的输入满足:链表表示一个不含前导零的数字,除了数字
0
本身。
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* doubleIt(ListNode* head) {
vector<int> vec;
ListNode* p=head;
while(p) {
vec.push_back(p->val);
p=p->next;
}
int n=vec.size();
int i=n-1;
int mod=0;
while(i>=0) {
int tmp=vec[i]*2+mod;
vec[i]=tmp%10;
mod=tmp/10;
i--;
}
ListNode* pre=new ListNode(mod);
pre->next=head;
p=head;
i=0;
while(p && i<n) {
p->val=vec[i];
p=p->next;
i++;
}
if(mod==0) {
pre=pre->next;
}
return pre;
}
};