Quick actions

cmd+k|ctrl+k

Navigation

Languages

Doubly LinkedList

Snippet info

Language

Java

Visibility

public

Author

mudaganisushanth

Created

2023-03-06T06:17:02.575424Z

Updated

2023-03-08T17:45:35.843197Z

class DoublyLinkedList{
    Node head;
    Node tail;
    int length;
    
    class Node
    {
        int value;
        Node next;
        Node prev;
        
        Node(int value)
        {
            this.value = value;
        }
    }
    
    DoublyLinkedList(int value)
    {
        Node newNode  = new Node(value);
        head = newNode;
        tail = newNode;
        length = 1;
    }
    
    public void printList()
    {
        Node temp = head;
        while(temp!=null)
        {
            System.out.print(temp.value+" ");
            temp = temp.next;
        }
    }
    public void getHead()
    {
       System.out.println("Head: "+head.value); 
    }
    public void getTail()
    {
       System.out.println("Tail: "+head.value); 
    }
    public void getLength()
    {
       System.out.println("Length: "+length); 
    }
    public void append(int value)
    {
        Node newNode = new Node(value);
        if(length == 0)
        {
            head = newNode;
            tail = newNode;
        }
        else
        {
        tail.next = newNode;
        newNode.prev = tail;
        tail = newNode;
        }
        length++;
        
    }
    public Node removeLast()
    {
        if(length == 0)
        {
            return null;
        }
        Node temp = tail;
        if(length == 1)
            {
                head = null;
                tail = null;
            }
        else
        {
            tail = temp.prev;
            temp.prev = null;
            tail.next = null;
            
        }
        length--;
        return temp;
    }
    
    public void prepend(int value)
    {
        Node newNode = new Node(value);
        if(length == 0)
        {
            head = newNode;
            tail = newNode;
        }
        else
        {
        head.prev = newNode;
        newNode.next = head;
        head = newNode;
        }
        length++;
    }
    
    public Node removeFirst()
    {
        if(length == 0)
        {
            return null;
        }
        Node temp = head;
        if(length == 1)
        {
            head = null;
            tail = null;
        }
        else
        {
        head = temp.next;
        temp.next = null;
        head.prev = null;
        }
        length--;
        return temp;
    }
    public Node get(int index)
    {
        if(index<0 || index>length)
        {
            return null;
        }
        else
        {
            if(index < length/2)
            {
                Node temp = head;
                for(int i=0;i<index;i++)
                {
                    temp=temp.next;
                }
                return temp;
            }
            else
            {
                Node temp = tail;
                for(int i=length-1;i>index;i--)
                {
                    temp = temp.prev;
                }
                return temp;
            }
        }
    }
    public boolean insert(int index,int value)
    {
        if(index < 0 || index > length)
        {
            return false;
        }
        else if(index == 0)
        {
            prepend(value);
            return true;
        }
        else
        {
        Node newNode = new Node(value);
        Node before = get(index-1);
        Node after = get(index);
        before.next = newNode;
        before=newNode.prev;
        newNode.next = after;
        after.prev = newNode;
        length++;
        return true;
        }
        
    }
    public boolean set(int index, int value)
    {
        Node temp = get(index);
        if(temp!=null)
        {
            temp.value=value;
            return true;
        }
        return false;
    }
    public Node remove(int index)
    {
        if(index < 0 || index > length)
        {
            return null;
        }
        if(index == length-1)
        {
            return removeLast();
        }
        if(index==0)
        {
            return removeFirst();
        }
        Node temp = get(index);
        Node before = get(index-1);
        Node after = get(index+1);
        temp.next=null;
        temp.prev=null;
        before.next=after;
        after.prev=before;
        length--;
        return temp;
        
    }
}


class Main {
    public static void main(String[] args) {
        DoublyLinkedList newDoublyLinkedList = new DoublyLinkedList(4);
        newDoublyLinkedList.append(1);
        newDoublyLinkedList.append(2);
        newDoublyLinkedList.append(3);
        newDoublyLinkedList.append(4);
        newDoublyLinkedList.remove(0);
        // newDoublyLinkedList.set(5,0);
        // newDoublyLinkedList.insert(4,7);

        
        // System.out.println("index is: "+newDoublyLinkedList.get(4).value);
        // newDoublyLinkedList.prepend(3);
        // System.out.println("Removed node: "+newDoublyLinkedList.removeFirst().value);
        // System.out.println("Removed node is :"+newDoublyLinkedList.removeLast().value);
        // System.out.println("Removed node is :"+newDoublyLinkedList.removeLast().value);
        // System.out.println("Removed node is :"+newDoublyLinkedList.removeLast().value);
        // System.out.println("Removed node is :"+newDoublyLinkedList.removeLast().value);

        newDoublyLinkedList.printList();
        // newDoublyLinkedList.getHead();
        // newDoublyLinkedList.getTail();
        // newDoublyLinkedList.getLength();
    }
}
INFO