LeetCode 2816. Double a Number Represented as a Linked List Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
2816. Double a Number Represented as a Linked List

Description

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.

Solutions

Solution 1: Reverse Linked List + Simulation

First, we reverse the linked list, then simulate the multiplication operation, and finally reverse the linked list back.

Time complexity is O(n), where n is the length of the linked list. Ignoring the space taken by the answer linked list, the space complexity is O(1).

PythonJavaC++GoTypeScript
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def doubleIt(self, head: Optional[ListNode]) -> Optional[ListNode]: def reverse(head): dummy = ListNode() cur = head while cur: next = cur.next cur.next = dummy.next dummy.next = cur cur = next return dummy.next head = reverse(head) dummy = cur = ListNode() mul, carry = 2, 0 while head: x = head.val * mul + carry carry = x // 10 cur.next = ListNode(x % 10) cur = cur.next head = head.next if carry: cur.next = ListNode(carry) return reverse(dummy.next)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !