https://leetcode.cn/problems/double-a-number-represented-as-a-linked-list/
这里我们直接模拟翻倍后链表的数字,首先我们得先考虑链表的头结点的值是否大于4(*2后是否需要进位)。
处理完头结点后,就需要考虑其余结点。因为求的是链表中每个结点翻倍后的值,所以对于每个结点我们都需要考虑到进位的问题。因为每个数*2后再加上进位的数值也不可能超过20 ,所以最多进位1.
struct ListNode* doubleIt(struct ListNode* head){
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* cur = head;
if(head->val > 4)
{
node->val = 1;
node->next = head;
head = node;
cur = head -> next;
}
while(cur)
{
cur -> val = cur->val*2%10; //把cur结点的值给*2再%10,这样求得的数是*2后的个位
//判断cur的下一个结点的值是否大于4,如果大于4,那*2后要进位
if(cur->next && cur->next->val > 4)
{
cur->val++;
}
cur = cur->next;
}
return head;
}