-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimplementOfLL.java
More file actions
271 lines (253 loc) · 11.7 KB
/
implementOfLL.java
File metadata and controls
271 lines (253 loc) · 11.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
//Question: Implementation of Linked List ~ Making a new class (LinkedList). Initialise and use various methods to do many tasks (Like insert, diplay, deletion) in Linked list.
package LinkedList;
import java.util.Scanner;
public class implementOfLL {
public static class Node { // Making new class named "Node"
int val; // Has part (Data)
Node next; // Has part (Next node reference)
}
public static class LinkedList {
Node head; // Has part
Node tail; // Has part
int size; // Has part
void createLinkList() { // Method 1: Creating a Linked List
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of elements: ");
int n = sc.nextInt();
System.out.println("Enter the elements of the link list: ");
if (n == 0) {
System.out.println("Empty list");
} else {
for (int i = 0; i < n; i++) {
int val = sc.nextInt();
insertAtEnd(val);
}
}
}
void insertAtEnd(int value) { // Method 2: To insert element in end.
Node temp = new Node(); // Making a new temporary node
temp.val = value;
if (head == null) { // Empty list
head = temp;
tail = temp;
} else { // If the list is not empty
tail.next = temp; // tail -> last element ; Isliye humne tail-node ke bad temp-node ko link kar diya ('tail-node' ke andar pahle 'null address' store tha {tail.next = null} par ab 'tail-node' ke andar 'temp' ka 'address' store hai)
tail = temp; // ekbar last main temp link ho jane ke bad ab last element temp hai. Isliye ab naya tail -> temp hoga.
}
size ++;
}
void insertAtStart(int value) { // Method 3: To insert element at the start
Node temp = new Node();
temp.val = value;
if (head == null) { // Empty list
head = temp;
tail = temp;
} else { // If the list is not empty
temp.next = head; // head -> first element ; Isliye temp ko head se pahle rakh kar, temp ke sath head ko link kar diya.
head = temp; // ekbar temp ko head se pahle link karne ke bad ab naya head(first node) temp hoga.
}
size ++;
}
void insertAtAnyposition(int position, int value) { // Method 4: To insert at any position
Node temp = new Node();
temp.val = value;
Node x = head; // x is the shallow copy of the head
for(int i = 0; i < position - 1; i++) {
x = x.next; // x ki position barti rahegi jab tak na wo given position ki pahle tak aa jaye
}
if (position == 0) {
insertAtStart(value);
return;
} else if(position == size - 1) {
insertAtEnd(value);
return;
} else if(position > size || position < 0) {
System.out.println("Invalid position/Index");
} else {
temp.next = x.next; // temp node ko x ke bad wale node ke pahle link kar diya.
x.next = temp; // x ke bad temp ko link kar diya. (x node -> temp node [with the value & in the given position] -> x ke bad wala node)
}
size ++;
}
void display() { // Method 5: To display the linked list.
Node temp = head; // temp is a Shallow copy of head
while(temp != null) {
System.out.print(temp.val + " ");
temp = temp.next;
}
}
void reverse() { // Method 6: To reverse the linked list
Node prev = null; // prev node (শুরুতে null, কারণ নতুন tail → null দেখাবে)
Node curr = head; // curr node (যেটা লিস্ট traverse করবে)
tail = head; // পুরানো head এখন tail হয়ে যাবে
while (curr != null) {
Node nextNode = curr.next; // পরের node আগে রেখে দাও (না হলে হারিয়ে যাবে)
curr.next = prev; // current node এর next কে prev এর দিকে point করাও
prev = curr; // prev কে সামনে এগিয়ে নাও (prev = curr)
curr = nextNode; // curr কে সামনে এগিয়ে নাও (curr = nextNode)
}
head = prev; // লুপ শেষ হলে prev হবে নতুন head
}
int getvalue(int index) { // Method 7: To get a particular element from the linked list
if (index == size - 1) {
return tail.val;
} else if (index == 0) {
return head.val;
} else if (index < 0 || index > size) {
System.out.println("Invalid Index");
return 0;
} else {
Node temp = head; // Shallow copy (points to the head node)
for (int i = 0; i < index; i++) {
temp = temp.next;
}
return temp.val;
}
}
void setvalue(int index , int value) { // Method 8: To change the value of a particular element from the linked list
if (index == size - 1) {
tail.val = value;
} else if (index == 0) {
head.val = value;
} else if (index < 0 || index > size) {
System.out.println("Invalid Index");
} else {
Node temp = head; // Shallow copy (points to the head node)
for (int i = 0; i < index; i++) {
temp = temp.next;
}
temp.val = value;
}
}
void deleteAtEnd() { // Method 9: To delete an element from the last of a linked list
if (head == null) {
System.out.println("Empty list");
} else {
Node temp = head; // Shallow copy (points to the head node)
for (int i = 0; i < size-2; i++) {
temp = temp.next; // temp last node ke wale node (Second last) ko point karega
}
tail = temp; // Ab naya "tail" (last node) -> "temp" hoga.
tail.next = null;
size --;
}
}
void deleteAtStart() { // Method 10: To delete an element from the Start of a linked list
if (head == null) {
System.out.println("Empty list");
} else {
head = head.next;
size --;
}
}
void deleteAtAnyposition(int position) { // Method 11: To delete node from any position
if (head == null) {
System.out.println("Empty list");
} else if (position == 0) {
deleteAtStart();
return;
} else if (position == size - 1) {
deleteAtEnd();
return;
} else {
Node temp = head; // Shallow copy (points to the head node)
for (int i = 0; i < position - 1; i++) {
temp = temp.next; // temp, given position ke pahle wale node ko point karega
}
temp.next = temp.next.next; // given position wala node skip ho raha hai
size --;
}
}
}
public static void main(String[] args) { // Main method
LinkedList ll = new LinkedList(); // Making the object of LinkedList class
Scanner sc = new Scanner(System.in);
int ch;
do {
System.out.println("--- CHOICES ---");
System.out.println("1.CREATE");
System.out.println("2.INSERT AT END");
System.out.println("3.INSERT AT START");
System.out.println("4.INSERT AT ANY POSITION");
System.out.println("5.DISPLAY");
System.out.println("6.REVERSE");
System.out.println("7.GET");
System.out.println("8.SET");
System.out.println("9.DELETE AT END");
System.out.println("10.DELETE AT START");
System.out.println("11.DELETE AT ANY POSITION");
System.out.println("12.EXIT");
ch = sc.nextInt();
switch (ch) {
case 1:
ll.createLinkList();
System.out.println("Linked List created.");
break;
case 2:
System.out.print("Enter the value: ");
int value1 = sc.nextInt();
ll.insertAtEnd(value1);
System.out.println("The value inserted at the end.");
break;
case 3:
System.out.print("Enter the value: ");
int value2 = sc.nextInt();
ll.insertAtStart(value2);
System.out.println("The value inserted at the start");
break;
case 4:
System.out.print("Enter the position: ");
int position1 = sc.nextInt();
System.out.print("Enter the value: ");
int value3 = sc.nextInt();
ll.insertAtAnyposition(position1, value3);
System.out.println("The value inserted in the " + position1 + "th position.");
break;
case 5:
System.out.print("The linked list is: ");
ll.display();
System.out.println();
break;
case 6:
ll.reverse();
System.out.print("Linked list reversed.");
break;
case 7:
System.out.print("Enter the index: ");
int index1 = sc.nextInt();
System.out.println("Element at the " + index1 + "th index is: " + ll.getvalue(index1));
break;
case 8:
System.out.print("Enter the index: ");
int index2 = sc.nextInt();
System.out.print("Enter the new value: ");
int value4 = sc.nextInt();
ll.setvalue(index2, value4);
System.out.println("New value " + value4 + " is set at the index " + index2);
break;
case 9:
ll.deleteAtEnd();
System.out.println("Last element deleted.");
break;
case 10:
ll.deleteAtStart();
System.out.println("First element deleted.");
break;
case 11:
System.out.print("Enter the position of node to delete: ");
int position2 = sc.nextInt();
ll.deleteAtAnyposition(position2);
System.out.println("Element deleted from " + position2 + "th position");
break;
case 12:
System.out.println("Program exited.");
System.out.println("Final size: " + ll.size);
break;
default:
System.out.println("Invalid choice");
break;
}
} while (ch != 12);
System.out.println();
}
}