給你一個?非空?鏈表的頭節點?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;}
};