Problem:
Doubly Linked List

Your task is to implement a double linked list.

Write a program which performs the following operations:

insert x: insert an element with key x into the front of the list.

delete x: delete the first element which has the key of x from the list. If there is not such element, you need not do anything.

deleteFirst: delete the first element from the list.

deleteLast: delete the last element from the list.

Input

The input is given in the following format:

n

command1

command2

...

commandn

In the first line, the number of operations n is given. In the following n lines, the above mentioned operations are given in the following format:

insert x

delete x

deleteFirst

deleteLast

Output

Print all the element (key) in the list after the given operations. Two consequtive keys should be separated by a single space.

Constraints

The number of operations ≤ 2,000,000

The number of delete operations ≤ 20

0 ≤ value of a key ≤ 109

The number of elements in the list does not exceed 106

For a delete, deleteFirst or deleteLast operation, there is at least one element in the list.

Sample Input 1

7
insert 5
insert 2
insert 3
insert 1
delete 3
insert 6
delete 5

Sample Output 1

6 1 2

Sample Input 2

9
insert 5
insert 2
insert 3
insert 1
delete 3
insert 6
delete 5
deleteFirst
deleteLast

Sample Output 2

1

Solution in JAVA (judge verdict: Wrong Answer)



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {

  public static void main(String args[]) throws IOException{

	  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      int n = Integer.parseInt( br.readLine() );

      List Doublelink = new List();
      String[] order = new String[n];
      for(int i = 0; i < n; i++ ){
        order[i] =  br.readLine();
      }


      for(int i = 0; i < n; i++ ){

    	  String[] string =  order[i].split(" ");

    	  if( string[0].equals("insert") ){
    		 // System.out.println("check1 " + i);
    		  Doublelink.insert( Integer.parseInt( string[1] ) );
    		  //Doublelink.printlist();
    	  }
    	  else if( string[0].equals("delete") ){
    		 // System.out.println("check2 "+ i);
    		  Doublelink.delete( Integer.parseInt( string[1] ) );
    	  }
    	  else if( string[0].equals("deleteFirst") ){
    		  Doublelink.deleteFirst();
    		 //System.out.println("check3 " + i);
    	  }
    	  else if( string[0].equals("deleteLast") ){
    		  Doublelink.deleteLast();
    		  //System.out.println("check4 " + i);
    	  }

    	 // System.out.println(n);
      }

      Doublelink.printlist();

 }
}


class Cell{

	Cell prev;
	Cell next;
	long data;

	Cell(long d) {
	   data = d;
	}

	void setNext(Cell next) {
        this.next = next;
    }
    // next?????????
    Cell getNext() {
        return next;
    }
    // prev??????????????????
    void setPrev(Cell prev) {
        this.prev = prev;
    }
    // prev?????????
   Cell getPrev() {
        return prev;
    }
    // ??????????????????
    long getData() {
        return data;
    }

}

class List{

    Cell dummy;

	List() {
        // ??????????????????????????????next??¨prev????????????????????????????¨??????????
        dummy = new Cell(0);
        dummy.setNext(dummy);
        dummy.setPrev(dummy);
    }


	void insert(long data) {//?????????????´?????????\
        // ???????????????

        Cell c = new Cell(data);
        c.setNext(dummy.getNext());
        c.setPrev(dummy);
        dummy.getNext().setPrev(c);
        dummy.setNext(c);


    }

	void deleteFirst() {//?????????????´??????????
        Cell c = dummy.getNext();
        c.getNext().setPrev(c.getPrev());
        c.getPrev().setNext(c.getNext());
    }

	void deleteLast() {//????°????????´??????????
		Cell end = dummy.getNext();
        while(end.getNext()!=dummy){
        	end = end.getNext();
        }
        end.getNext().setPrev( end.getPrev() );
        end.getPrev().setNext( end.getNext() );
    }

	void delete(long data ) {//???????????????????´??????????


		Cell deletecell = dummy.getNext();


        while( deletecell.getNext() != dummy){

        	if( deletecell.getData() == data ){
        		deletecell.getPrev().setNext( deletecell.getNext() );
                deletecell.getNext().setPrev( deletecell.getPrev() );
                break;
        	}
        	deletecell = deletecell.getNext();

        }



	}

	void printlist() {//??????????????¨???

		Cell end = dummy.getNext();
        while(end!=dummy){
        	//System.out.println("checkfinal");
        	System.out.print( end.getData() );


        	if(end.getNext()!=dummy){
            	System.out.print( " " );
            }
        	end = end.getNext();
        }

        System.out.println();

	}

}