class LinkedList{
int length;
Node head;
Node tail;
class Node
{
int value;
Node next;
Node(int value)
{
this.value = value;
}
}
public LinkedList(int value)
{
Node NewNode = new Node(value);
head = NewNode;
tail = NewNode;
length = 1;
}
public void printList()
{
Node temp = head;
while(temp!= null)
{
System.out.println(temp.value);
temp=temp.next;
}
}
public void append(int value)
{
Node NewNode = new Node(value);
if(length == 0)
{
head = NewNode;
tail = NewNode;
}
else
{
tail.next = NewNode;
tail = NewNode;
}
length++;
}
public Node RemoveLast()
{
if(length == 0)
{
return null;
}
else
{
Node temp=head;
Node pre=head;
while(temp.next!= null)
{
pre = temp;
temp = temp.next;
}
tail = pre;
tail.next = null;
length--;
if(length==0)
{
head = null;
tail = null;
}
return temp;
}
}
public void prepend(int value)
{
Node NewNode = new Node(value);
if(length == 0)
{
head = NewNode;
tail = NewNode;
}
else
{
NewNode.next = head;
head = NewNode;
}
length++;
}
public Node RemoveFirst()
{
if(length == 0)
{
return null;
}
else
{
Node temp=head;
head = head.next;
temp.next = null;
length--;
if(length == 0)
{
head = null;
tail = null;
}
return temp;
}
}
public Node get(int index)
{
if(index < 0 || index >= length)
{
return null;
}
else
{
Node temp = head;
for(int i=0;i<index;i++)
{
temp = temp.next;
}
return temp;
}
}
public boolean set(int index, int value)
{
Node temp = get(index);
if(temp!=null)
{
temp.value = value;
return true;
}
else
{
return false;
}
}
public boolean insert(int index,int value)
{
if(index == 0)
{
prepend(value);
return true;
}
else if(index == length)
{
append(value);
return true;
}
else
{
Node NewNode = new Node(value);
Node temp = get(index-1);
NewNode.next = temp.next;
temp.next = NewNode;
length++;
return true;
}
}
public Node Remove(int index)
{
if(index>=length || index<0)
{
return null;
}
else if(index == 0)
{
return RemoveFirst();
}
else if(index == length-1)
{
return RemoveLast();
}
else
{
Node prev = get(index-1);
Node temp=prev.next;
prev.next = temp.next;
temp.next = null;
length--;
return temp;
}
}
}
class Main {
public static void main(String[] args) {
LinkedList myLinkedList = new LinkedList(1);
myLinkedList.append(2);
myLinkedList.append(3);
myLinkedList.append(4);
myLinkedList.prepend(6);
myLinkedList.printList();
System.out.println("List after inserting");
myLinkedList.insert(2,9);
myLinkedList.printList();
System.out.println("List after removing");
System.out.println(myLinkedList.Remove(3).value);
myLinkedList.printList();
// System.out.println("Index :"+myLinkedList.get(2).value);
// System.out.println("RemoveFirst: "+myLinkedList.RemoveFirst().value);
// System.out.println("RemoveLast: "+myLinkedList.RemoveLast().value);
// myLinkedList.printList();
// System.out.println("Linked List After Set operation");
// myLinkedList.set(1,7);
// myLinkedList.printList();
}
}