淘先锋技术网

首页 1 2 3 4 5 6 7

给你一个 非空 链表的头节点 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;
    }
};