public class Program {
public static void main(String[] args) {
DoublyLinkedList list = new DoublyLinkedList();
list.insert_at_end(30);
list.insert_at_end(20);
list.insert_at_end(10);
list.insert_between(30, 20, 50);
list.print();
list.delete_node(50);
list.print();
}
}
class DoublyLinkedList {
class Node {
int info;
Node next; // sledbenik
Node prev; // prethodnik
public Node( int x) {
info = x;
next = null;
prev = null;
}
}
Node head = null;
void insert_at_beggining(int x) {
if(head == null) {
head = new Node(x);
return;
}
Node new_node = new Node(x);
new_node.next = head;
head.prev = new_node;
head = new_node;
}
void insert_at_end(int x) {
if(head == null) {
head = new Node(x);
return;
}
Node new_node = new Node(x);
Node tmp = head;
while(tmp.next != null) {
tmp = tmp.next;
}
tmp.next = new_node;
new_node.prev = tmp;
}
void insert_between(int x, int y, int new_value) {
Node x_node = head;
while(x_node.info != x) {
x_node = x_node.next;
}
Node y_node = x_node.next;
Node new_node = new Node(new_value);
x_node.next = new_node;
new_node.prev = x_node;
new_node.next = y_node;
y_node.prev = new_node;
}
void delete_node(int x) {
Node tmp = head;
while(tmp.info != x) {
tmp = tmp.next;
}
tmp.prev.next = tmp.next;
tmp.next.prev = tmp.prev;
}
void print() {
Node tmp = head;
while(tmp != null) {
System.out.print(tmp.info + " --> ");
if(tmp.next == null) {
break;
}
tmp = tmp.next;
}
System.out.println();
while(tmp != null) {
System.out.print(tmp.info + " <-- ");
if(tmp.prev == null) {
break;
}
tmp = tmp.prev;
}
System.out.println();
}
}