@@ -3,67 +3,119 @@ private static class Node<E> {
3
3
private E element ;
4
4
private Node <E > prev ;
5
5
private Node <E > next ;
6
- public Node (E e , Node <E > p , Node <E > n ){
6
+
7
+ public Node (E e , Node <E > p , Node <E > n ) {
7
8
element = e ;
8
9
prev = p ;
9
10
next = n ;
10
11
}
11
- public E getElement () { return element ; }
12
- public Node <E > getPrev () { return prev ; }
13
- public Node <E > getNext () { return next ; }
14
- public void setPrev (Node <E > p ) { prev = p ;}
15
- public void setNext (Node <E > n ) { next = n ;}
12
+
13
+ public E getElement () {
14
+ return element ;
15
+ }
16
+
17
+ public Node <E > getPrev () {
18
+ return prev ;
19
+ }
20
+
21
+ public Node <E > getNext () {
22
+ return next ;
23
+ }
24
+
25
+ public void setPrev (Node <E > p ) {
26
+ prev = p ;
27
+ }
28
+
29
+ public void setNext (Node <E > n ) {
30
+ next = n ;
31
+ }
16
32
}
33
+
17
34
private Node <E > header ;
18
35
private Node <E > tailer ;
19
36
private int size = 0 ;
20
- //constructor a new empty list
21
- public DoublyLL (){
37
+
38
+ // constructor a new empty list
39
+ public DoublyLL () {
22
40
header = new Node <>(null , null , null );
23
41
tailer = new Node <>(null , header , null );
24
42
header .setNext (tailer );
25
43
}
26
- public int size (){
44
+
45
+ public int size () {
27
46
return size ;
28
47
}
29
- public boolean isEmpty (){
48
+
49
+ public boolean isEmpty () {
30
50
return size == 0 ;
31
51
}
32
- public E first (){
52
+
53
+ public E first () {
33
54
if (isEmpty ()) {
34
55
return null ;
35
56
}
36
57
return header .getNext ().getElement ();
37
58
}
38
- public E last (){
59
+
60
+ public E last () {
39
61
if (isEmpty ()) {
40
62
return null ;
41
63
}
42
64
return tailer .getPrev ().getElement ();
43
65
}
44
- //update methods
45
- public void addFirst (E e ){
66
+
67
+ // update methods
68
+ public void addFirst (E e ) {
46
69
addBetween (e , header , header .getNext ());
47
70
}
48
- public void addLast (E e ){
71
+
72
+ public void addLast (E e ) {
49
73
addBetween (e , tailer .getPrev (), tailer );
50
74
}
51
- public E removeFirst (){
75
+
76
+ public void addAtIndex (E e , int index ) {
77
+ if (index < 0 || index > size ) {
78
+ throw new IndexOutOfBoundsException ("Index: " + index + " size: " + size );
79
+ }
80
+ if (isEmpty ()) {
81
+ addBetween (e , tailer , header .getNext ());
82
+ } else if (index == 0 ) {
83
+ addBetween (e , header , header .getNext ());
84
+ } else if (index == size ) {
85
+ addBetween (e , tailer .getPrev (), tailer );
86
+ }
87
+
88
+ else {
89
+ Node <E > newNode = header ;
90
+ for (int i = 0 ; i < index ; i ++) {
91
+ System .out .println ("\n elemet at: " + i + " e: " + newNode .getElement ());
92
+ newNode = newNode .getNext ();
93
+ }
94
+ addBetween (e , newNode , newNode .getNext ());
95
+ System .out .println ("\n header: " + newNode .getElement ());
96
+ }
97
+ }
98
+
99
+ public E removeFirst () {
52
100
if (isEmpty ()) {
53
101
return null ;
54
102
}
55
103
return remove (header .getNext ());
56
104
}
57
- public E removeLast (){
58
- if (isEmpty ()) return null ;
105
+
106
+ public E removeLast () {
107
+ if (isEmpty ())
108
+ return null ;
59
109
return remove (tailer .getPrev ());
60
110
}
61
- private void addBetween (E e , Node <E > predecessor , Node <E > successor ){
111
+
112
+ private void addBetween (E e , Node <E > predecessor , Node <E > successor ) {
62
113
Node <E > newest = new Node <>(e , predecessor , successor );
63
114
predecessor .setNext (newest );
64
115
successor .setPrev (newest );
65
116
size ++;
66
117
}
118
+
67
119
private E remove (Node <E > node ) {
68
120
Node <E > predecessor = node .getPrev ();
69
121
Node <E > successor = node .getNext ();
@@ -72,33 +124,39 @@ private E remove(Node<E> node) {
72
124
size --;
73
125
return node .getElement ();
74
126
}
75
- public void display (){
127
+
128
+ public void display () {
76
129
if (isEmpty ()) {
77
130
System .out .println ("List is empty!" );
78
131
return ;
79
132
}
80
133
Node <E > current = header .getNext ();
81
- while (current != null ){
82
- System .out .print (current .getElement ()+ " " );
134
+ while (current != null ) {
135
+ System .out .print (current .getElement () + " " );
83
136
current = current .getNext ();
84
- if (current .getElement () ==null ) {
137
+ if (current .getElement () == null ) {
85
138
return ;
86
139
}
87
140
}
88
141
}
89
142
90
143
}
91
- public class DoublyLinkedList {
92
- public static void main (String [] args ){
144
+
145
+ public class DoublyLinkedList {
146
+ public static void main (String [] args ) {
93
147
DoublyLL <Integer > dll = new DoublyLL <>();
94
148
dll .addFirst (3 );
95
149
dll .addFirst (2 );
96
150
dll .addFirst (1 );
97
151
dll .addLast (4 );
98
- System .out .println ("First element: " +dll .first ());
99
- System .out .println ("Last element: " +dll .last ());
100
- System .out .println ("Total element: " +dll .size ());
152
+ // dll.addAtIndex(33, 3);
153
+ System .out .println ("First element: " + dll .first ());
154
+ System .out .println ("Last element: " + dll .last ());
155
+ System .out .println ("Total element: " + dll .size ());
101
156
System .out .println ("Doubly Linked List: " );
102
157
dll .display ();
158
+ dll .addAtIndex (13 , 3 );
159
+ System .out .println ("\n After inserting at i" );
160
+ dll .display ();
103
161
}
104
162
}
0 commit comments