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