-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDLinkedList.java
More file actions
145 lines (119 loc) · 2.75 KB
/
DLinkedList.java
File metadata and controls
145 lines (119 loc) · 2.75 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
/*
* (C) 2016 CSE2010 HW #2
*
* Modify and/or methods (fields) if necessary ...
*/
import java.util.*;
class DNode<T> {
private T info;
private DNode<T> next;
private DNode<T> prev;
DNode(T info, DNode<T> prev, DNode<T> next) {
this.info = info;
this.prev = prev;
this.next = next;
}
T getInfo() {
return info;
}
void setInfo(T info) {
this.info = info;
}
DNode<T> getNext() {
return next;
}
void setNext(DNode<T> n) {
next = n;
}
DNode<T> getPrev() {
return prev;
}
void setPrev(DNode<T> p) {
prev = p;
}
}
public class DLinkedList<T> {
private DNode<T> header;
private DNode<T> trailer;
private int size;
public DLinkedList() {
header = new DNode<T>(null, null, null);
trailer = new DNode<T>(null, header, null);
header.setNext(trailer);
size = 0;
}
public boolean isEmpty() {
return size == 0 ? true : false;
}
// Add new node n at the front
public void addFirst(DNode<T> n) {
addAfter(header, n);
}
// Add new node n at the rear
public void addLast(DNode<T> n) {
addBefore(trailer, n);
}
// Remove a node at the front
public void removeFirst() {
remove(header.getNext());
}
// Remove a node at the front
public void removeLast() {
remove(trailer.getPrev());
}
// Add new node n before node p
public void addBefore(DNode<T> p, DNode<T> n) {
DNode<T> pp = p.getPrev();
pp.setNext(n);
p.setPrev(n);
n.setNext(p);
n.setPrev(pp);
/*
* Your code goes here
*/
size++;
}
// Add new node n after node p
public void addAfter(DNode<T> p, DNode<T> n) {
DNode<T> pn = p.getNext();
p.setNext(n);
pn.setPrev(n);
n.setNext(pn);
n.setPrev(p);
/*
* Your code goes here
*/
size++;
}
// Remove a node p
public void remove(DNode<T> p) {
p.getPrev().setNext(p.getNext());
p.getNext().setPrev(p.getPrev());
p.setPrev(null);
p.setNext(null);
size--;
}
public DNode<T> getFirstNode() {
if (size == 0) return null;
else
return header.getNext();
}
public DNode<T> getNextNode(DNode<T> cur) {
if(size == 0) return null;
else
return cur.getNext();
/*
* Your code goes here
*/
}
public DNode<T> getLastNode() {
if (size == 0) return null;
else
return trailer.getPrev();
}
public int getSize(){
int k = size;
return k;
}
// Add methods if necessary
}