-
-
Notifications
You must be signed in to change notification settings - Fork 155
Expand file tree
/
Copy pathDoubleListNode.java
More file actions
152 lines (123 loc) · 3.13 KB
/
Copy pathDoubleListNode.java
File metadata and controls
152 lines (123 loc) · 3.13 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
package util;
public class DoubleListNode {
int val;
DoubleListNode prev;
DoubleListNode next;
public DoubleListNode(int val) {
this.val = val;
prev = null;
next = null;
}
public void traverseFromBeginning(DoubleListNode node) {
// Go to the start
while (node.prev != null) {
node = node.prev;
}
// Start printing the values now
while (node != null) {
System.out.println(node.val);
// Move to next value
node = node.next;
}
}
public void traverseFromEnd(DoubleListNode node) {
// Go to the end
while (node.next != null) {
node = node.next;
}
// Start printing the values now
while (node != null) {
System.out.println(node.val);
// Move to previous value
node = node.prev;
}
}
public void insertAtBeginning(DoubleListNode node, int valueToInsert) {
// Go to the start
while (node.prev != null) {
node = node.prev;
}
DoubleListNode temp = new DoubleListNode(valueToInsert);
temp.next = node;
node.prev = temp;
}
public void insertAtEnd(DoubleListNode node, int valueToInsert) {
// Go to the end
while (node.next != null) {
node = node.next;
}
DoubleListNode temp = new DoubleListNode(valueToInsert);
temp.prev = node;
node.next = temp;
}
public void insertAtPosition(DoubleListNode node, int valueToInsert, int pos) {
// Go to the start
while (node.prev != null) {
node = node.prev;
}
// Move ahead required number of places
for (int i = 1; i < pos; i++) {
node = node.next;
}
DoubleListNode temp = new DoubleListNode(valueToInsert);
temp.prev = node;
temp.next = node.next;
node.next.prev = temp;
node.next = temp;
}
public void deleteFromBeginning(DoubleListNode node) {
// Go to the start
while (node.prev != null) {
node = node.prev;
}
DoubleListNode temp = node.next;
node.next = null;
temp.prev = null;
}
public void deleteFromEnd(DoubleListNode node) {
// Go to the end
while (node.next != null) {
node = node.next;
}
DoubleListNode temp = node.prev;
node.prev = null;
temp.next = null;
}
public void deleteAtPosition(DoubleListNode node, int pos) {
// Go to the start
while (node.prev != null) {
node = node.prev;
}
// Go to the position
for (int i = 1; i < pos; i++) {
node = node.next;
}
node.next.prev = node.prev;
node.prev.next = node.next;
node.next = null;
node.prev = null;
}
public static void main(String[] args) {
// Create 3 nodes
DoubleListNode l1 = new DoubleListNode(4);
DoubleListNode l2 = new DoubleListNode(8);
DoubleListNode l3 = new DoubleListNode(15);
// Link the nodes
l1.next = l2;
l2.prev = l1;
l2.next = l3;
l3.prev = l2;
// Iterate from beginning
DoubleListNode temp = l1;
while (temp != null) {
System.out.println(temp.val + " ,");
temp = temp.next;
}
// Iterate from last
temp = l3;
while (temp != null) {
System.out.println(temp.val + " ,");
temp = temp.prev;
}
}
}