This repository was archived by the owner on Sep 7, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 1 file changed +127
-0
lines changed Expand file tree Collapse file tree 1 file changed +127
-0
lines changed Original file line number Diff line number Diff line change 1+ #include < bits/stdc++.h>
2+ using namespace std ;
3+
4+ /*
5+
6+ Increment Linked List by 1
7+
8+ This program increments the list by 1. The program takes input with one space and when entered -1 at the end, it stops taking more inputs
9+ For example
10+
11+ Input:
12+ 3 1 -1
13+
14+ Output:
15+ 3 2
16+
17+ Input2:
18+ 9 9 -1
19+
20+ Output2:
21+ 1 0 0
22+
23+ Idea is to reverse a LL, made some calculations and reverse it again to obtain the answer.
24+
25+ */
26+
27+ class Node {
28+ public:
29+ int data;
30+ Node *next;
31+
32+ Node (int data) {
33+ this ->data = data;
34+ this ->next = NULL ;
35+ }
36+ };
37+
38+ Node* takeInput () {
39+ Node* head = NULL ;
40+ Node* prev = NULL ;
41+ int d;
42+ cin >> d;
43+
44+ while (d != -1 ) {
45+ Node* newnode = new Node (d);
46+ if (head == NULL ) {
47+ head = newnode;
48+ prev = head;
49+ }
50+ else {
51+ prev->next = newnode;
52+ prev = newnode;
53+ }
54+ cin >> d;
55+ }
56+ return head;
57+ }
58+
59+ Node* reverseLL (Node* head) {
60+ Node* curr = head;
61+ Node* prev = NULL ;
62+ while (curr != NULL ) {
63+ if (prev == NULL ) {
64+ prev = curr;
65+ curr = curr->next ;
66+ prev->next = NULL ;
67+ }
68+ else {
69+ Node* var = curr;
70+ curr = curr->next ;
71+ var->next = prev;
72+ prev = var;
73+ }
74+ }
75+ return prev;
76+ }
77+
78+ void print (Node* head) {
79+ Node* temp = head;
80+ while (temp != NULL ) {
81+ cout<<temp->data <<" " ;
82+ temp = temp->next ;
83+ }
84+ }
85+
86+ int main () {
87+ Node* head = takeInput ();
88+ Node *newHead = NULL ;
89+ newHead = reverseLL (head);
90+
91+ bool carry = false ;
92+
93+ Node *temp = newHead;
94+ Node *prev = NULL ;
95+ int digit = temp->data + 1 ;
96+ while (temp!= NULL ) {
97+ if (carry) {
98+ int data = temp->data + 1 ;
99+ if (data >= 10 ) {
100+ temp->data = (data%10 );
101+ carry = true ;
102+ }
103+ else {
104+ temp->data = data;
105+ carry = false ;
106+ break ;
107+ }
108+ }
109+ else if (digit>=10 ) {
110+ temp->data = (digit%10 );
111+ carry = true ;
112+ }
113+ else if (digit<10 ) {
114+ temp->data = temp->data + 1 ;
115+ break ;
116+ }
117+ prev = temp;
118+ temp = temp->next ;
119+ }
120+ if (carry) {
121+ Node* newNode = new Node (1 );
122+ prev->next = newNode;
123+ newNode->next = NULL ;
124+ }
125+ head = reverseLL (newHead);
126+ print (head);
127+ }
You can’t perform that action at this time.
0 commit comments