Add 1 to a number represented as linked list in C++
In this post, we will learn how to add 1 to a number represented as linked list in C++. For example 4959 is represented as (4-> 9-> 5 -> 9->9) and adding 1 to it should change it to (4->9->6->0->0).
Add 1 to a number represented as linked list in C++
In this approach we will follow the following steps:
1. At first linked list is reversed.
2. Then we add 1 to leftmost node in the linked list. And if there is a carry, we will move to the next node. We will keep traversing until the carry is 0.
3. Finally we will again reverse our modified linked list and then return head.
#include <bits/stdc++.h> using namespace std; class Node { public: int data; Node* next; Node(int value){ data=value; next=NULL; } }; Node *reverse(Node *head) { Node * prev = NULL; Node * current = head; Node * next; while (current != NULL) { next = current->next; current->next = prev; prev = current; current = next; } return prev; } Node *addUtil(Node *head) { Node* res = head; Node *temp, *prev = NULL; int sum; int carry = 1; while (head != NULL) { sum = carry + head->data; carry = (sum >= 10)? 1 : 0; sum = sum % 10; head->data = sum; temp = head; head = head->next; } if (carry > 0) temp->next = new Node(carry); return res; } Node* add1One(Node *head) { head = reverse(head); head = addUtil(head); return reverse(head); } void printList(Node *node) { while (node != NULL) { cout << node->data; node = node->next; } cout<<endl; } int main() { Node *head = new Node(4); head->next = new Node(9); head->next->next = new Node(5); head->next->next->next = new Node(9); cout << "List is "; printList(head); cout<<endl; head = add1One(head); cout << "After adding 1 the new list is "; printList(head); return 0; }
input:List is 4959 output:After adding 1 the new list is 4960
Leave a Reply