Given a non-negative integer represented as a linked list of digits, plus one to the integer.
The digits are stored such that the most significant digit is at the head of the list.
Example 1:
Input: head = [1,2,3]
Output: [1,2,4]
Example 2:
Input: head = [0]
Output: [1]
Constraints:
The number of nodes in the linked list is in the range [1, 100].
0 <= Node.val <= 9
The number represented by the linked list does not contain leading zeros except for the zero itself.
Solutions
Solution 1: Linked List Traversal
We first set a dummy head node \(\textit{dummy}\), initially with a value of \(0\), and the successor node of \(\textit{dummy}\) is the linked list \(\textit{head}\).
Next, we traverse the linked list starting from the dummy head node, find the last node that is not \(9\), increment its value by \(1\), and set the values of all nodes after this node to \(0\).
Finally, we check if the value of the dummy head node is \(1\). If it is \(1\), we return \(\textit{dummy}\); otherwise, we return the successor node of \(\textit{dummy}\).
The time complexity is \(O(n)\), where \(n\) is the length of the linked list. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 910111213141516171819
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution:defplusOne(self,head:Optional[ListNode])->Optional[ListNode]:dummy=ListNode(0,head)target=dummywhilehead:ifhead.val!=9:target=headhead=head.nexttarget.val+=1target=target.nextwhiletarget:target.val=0target=target.nextreturndummyifdummy.valelsedummy.next
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */funcplusOne(head*ListNode)*ListNode{dummy:=&ListNode{0,head}target:=dummyforhead!=nil{ifhead.Val!=9{target=head}head=head.Next}target.Val++fortarget=target.Next;target!=nil;target=target.Next{target.Val=0}ifdummy.Val==1{returndummy}returndummy.Next}