Add one to a number represented as linked list | Set 2
Given a singly linked list which represents a number where each node contains only one digit [0 – 9]. The task is to add 1 to the number represented by the given linked list and print the new linked list.
Examples:
Input: 1 -> 2 -> 9 -> 9 -> NULL
Output:
Original list is : 1 2 9 9
Resultant list is : 1 3 0 0
Input: 9 -> 9 -> 9 -> 9 -> NULL
Output:
Original list is : 9 9 9 9
Resultant list is : 1 0 0 0 0
Approach: A previous implementation of the above problem was discussed in this post. However, one of the implementations requires the linked list to be reversed and the other makes use of recursion. An O(1) space complexity solution is been discussed here which doesn’t require the linked list to be reversed.
The main focus in this question is on the digit 9 which creates all the changes otherwise for other digits we have to just increment their value by 1 but if we change the node’s value with the value 9 it makes a carry which then has to be passed through the linked list.
Find the last node in the linked list which is not equal to 9. Now there are three cases:
- If there is no such node i.e. the value of every node is 9 then the new linked list will contain all 0s and a single 1 inserted at the head of the linked list.
- If the rightmost node which is not equal to 9 is the last node in the linked list then add 1 to this node and return the head of the linked list.
- If the node is other than the last node i.e. every node after it is equal to 9 then add 1 to the current node and change all the nodes after it to 0.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
Node* next;
};
Node* create_Node( int data)
{
Node* temp = new Node();
temp->data = data;
temp->next = NULL;
return temp;
}
void print(Node* head)
{
Node* temp = head;
while (temp != NULL) {
cout << temp->data << " " ;
temp = temp->next;
}
cout << endl;
}
Node* addOne(Node* head)
{
Node* last = NULL;
Node* cur = head;
while (cur->next != NULL) {
if (cur->data != 9) {
last = cur;
}
cur = cur->next;
}
if (cur->data != 9) {
cur->data++;
return head;
}
if (last == NULL) {
last = new Node();
last->data = 0;
last->next = head;
head = last;
}
last->data++;
last = last->next;
while (last != NULL) {
last->data = 0;
last = last->next;
}
return head;
}
int main()
{
Node* head = create_Node(1);
head->next = create_Node(2);
head->next->next = create_Node(9);
head->next->next->next = create_Node(9);
cout << "Original list is : " ;
print(head);
head = addOne(head);
cout << "Resultant list is : " ;
print(head);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static class Node
{
int data;
Node next;
};
static Node create_Node( int data)
{
Node temp = new Node();
temp.data = data;
temp.next = null ;
return temp;
}
static void print(Node head)
{
Node temp = head;
while (temp != null )
{
System.out.print(temp.data + " " );
temp = temp.next;
}
System.out.println();
}
static Node addOne(Node head)
{
Node last = null ;
Node cur = head;
while (cur.next != null )
{
if (cur.data != 9 )
{
last = cur;
}
cur = cur.next;
}
if (cur.data != 9 )
{
cur.data++;
return head;
}
if (last == null )
{
last = new Node();
last.data = 0 ;
last.next = head;
head = last;
}
last.data++;
last = last.next;
while (last != null )
{
last.data = 0 ;
last = last.next;
}
return head;
}
public static void main(String[] args)
{
Node head = create_Node( 1 );
head.next = create_Node( 2 );
head.next.next = create_Node( 9 );
head.next.next.next = create_Node( 9 );
System.out.print( "Original list is : " );
print(head);
head = addOne(head);
System.out.print( "Resultant list is : " );
print(head);
}
}
|
Python3
class Node():
def __init__( self ):
self .data = None
self . next = None
def create_Node(data):
temp = Node()
temp.data = data
temp. next = None
return temp
def printList(head):
temp = head
while (temp ! = None ):
print (temp.data, end = ' ' )
temp = temp. next
print ()
def addOne(head):
last = None
cur = head
while (cur. next ! = None ):
if (cur.data ! = 9 ):
last = cur
cur = cur. next
if (cur.data ! = 9 ):
cur.data + = 1
return head
if (last = = None ):
last = Node()
last.data = 0
last. next = head
head = last
last.data + = 1
last = last. next
while (last ! = None ):
last.data = 0
last = last. next
return head
if __name__ = = '__main__' :
head = create_Node( 1 )
head. next = create_Node( 2 )
head. next . next = create_Node( 9 )
head. next . next . next = create_Node( 9 )
print ( "Original list is : " , end = "")
printList(head)
head = addOne(head)
print ( "Resultant list is : " , end = "")
printList(head)
|
C#
using System;
class GFG
{
public class Node
{
public int data;
public Node next;
};
static Node create_Node( int data)
{
Node temp = new Node();
temp.data = data;
temp.next = null ;
return temp;
}
static void print(Node head)
{
Node temp = head;
while (temp != null )
{
Console.Write(temp.data + " " );
temp = temp.next;
}
Console.WriteLine();
}
static Node addOne(Node head)
{
Node last = null ;
Node cur = head;
while (cur.next != null )
{
if (cur.data != 9)
{
last = cur;
}
cur = cur.next;
}
if (cur.data != 9)
{
cur.data++;
return head;
}
if (last == null )
{
last = new Node();
last.data = 0;
last.next = head;
head = last;
}
last.data++;
last = last.next;
while (last != null )
{
last.data = 0;
last = last.next;
}
return head;
}
public static void Main(String[] args)
{
Node head = create_Node(1);
head.next = create_Node(2);
head.next.next = create_Node(9);
head.next.next.next = create_Node(9);
Console.Write( "Original list is : " );
print(head);
head = addOne(head);
Console.Write( "Resultant list is : " );
print(head);
}
}
|
Javascript
<script>
class Node {
constructor()
{
this .data =0;
this .next = null ;
}
};
function create_Node(data)
{
var temp = new Node();
temp.data = data;
temp.next = null ;
return temp;
}
function print(head)
{
var temp = head;
while (temp != null ) {
document.write( temp.data + " " );
temp = temp.next;
}
document.write( "<br>" );
}
function addOne(head)
{
var last = null ;
var cur = head;
while (cur.next != null ) {
if (cur.data != 9) {
last = cur;
}
cur = cur.next;
}
if (cur.data != 9) {
cur.data++;
return head;
}
if (last == null ) {
last = new Node();
last.data = 0;
last.next = head;
head = last;
}
last.data++;
last = last.next;
while (last != null ) {
last.data = 0;
last = last.next;
}
return head;
}
var head = create_Node(1);
head.next = create_Node(2);
head.next.next = create_Node(9);
head.next.next.next = create_Node(9);
document.write( "Original list is : " );
print(head);
head = addOne(head);
document.write( "Resultant list is : " );
print(head);
</script>
|
Output:
Original list is : 1 2 9 9
Resultant list is : 1 3 0 0
Time Complexity: O(N)
Space Complexity: O(1)
Last Updated :
06 Jul, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...