2816. Double a Number Represented as a Linked List

2816. Double a Number Represented as a Linked List

2816. Double a Number Represented as a Linked List

Medium

You are given the head of a non-empty linked list representing a non-negative integer without leading zeroes.

Return the head of the linked list after doubling it.

Example 1:

Input: head = [1,8,9]

Output: [3,7,8]

Explanation: The figure above corresponds to the given linked list which represents the number 189. Hence, the returned linked list represents the number 189 * 2 = 378.

Example 2:

Input: head = [9,9,9]

Output: [1,9,9,8]

Explanation: The figure above corresponds to the given linked list which represents the number 999. Hence, the returned linked list reprersents the number 999 * 2 = 1998.

Constraints:

The number of nodes in the list is in the range [1, 104]

0 <= Node.val <= 9
The input is generated such that the list represents a number that does not have leading zeros, except the number 0 itself.

Solution:

/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val = 0, $next = null) {
* $this->val = $val;
* $this->next = $next;
* }
* }
*/
class Solution {

/**
* @param ListNode $head
* @return ListNode
*/
function doubleIt($head) {
if ($head->val >= 5)
$head = new ListNode(0, $head);

for ($curr = $head; $curr != null; $curr = $curr->next) {
$curr->val *= 2;
$curr->val %= 10;
if ($curr->next && $curr->next->val >= 5)
++$curr->val;
}

return $head;
}
}

Leave a Reply

Your email address will not be published. Required fields are marked *