-
Notifications
You must be signed in to change notification settings - Fork 0
/
DLL.java
116 lines (102 loc) · 2.53 KB
/
DLL.java
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
package eg.edu.alexu.csd.datastructure.linkedList;
public class DlinkedList {
private Dnode head = null;
private int size = 0;
public void print(){
if(head == null) return;
Dnode i = head;
while(i!= null){
System.out.println(i.data);
i = i.next;
}
}
public void add(int index, Object element) {
if(index > size || index < 0) return;
Dnode newnode = new Dnode(element);
if(head==null){
head = newnode;
size++;
}
else if(index == 0){
newnode.next = head;
head.prev = newnode;
head = newnode;
size++;
}
else if(index == size ){
this.add(element);
}else{
Dnode i = head;
int counter =0;
while(counter < index-1){
i = i.next;
counter++;
}
newnode.next = i.next;
i.next.prev = newnode;
i.next = newnode;
newnode.prev =i;
size++;
}
}
@Override
public void add(Object element) {
Dnode newnode = new Dnode(element);
if(head == null){
head = newnode;
size++;
}else{
Dnode i = head;
while(i.next != null) i = i.next;
i.next = newnode;
newnode.prev = i;
size++;
}
}
public void set(int index, Object element) {
if(index >= size) return;
Dnode pointer = head;
for(int i = 0; i < index; i++)
pointer = pointer.next;
pointer.data = element;
}
public void clear() {
head = null;
}
public boolean isEmpty() {
if(head == null)
return true;
return false;
}
public void remove(int index) {
if(head == null & index >= size) return;
Dnode pointer = head;
for(int i = 0; i < index-1; i++)
pointer = pointer.next;
pointer.next = pointer.next.next;
pointer.next.prev = pointer;
size--;
}
public int size() {
return size;
}
public Dnode sublist(int fromIndex, int toIndex) {
if(fromIndex >= size & toIndex >= size) return null;
Dnode pointer = head;
int i;
for(i = 0; i < fromIndex; i++)
pointer = pointer.next;
Dnode pointer2 = pointer;
for(int j = i; j < toIndex; j++)
pointer2 = pointer2.next;
pointer2.next = null;
return pointer;
}
public boolean contains(Object o) {
for(Dnode pointer = head; pointer != null; pointer = pointer.next){
if(pointer.data == o)
return true;
}
return false;
}
}