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  command 1   command 2  ...  command n   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 ≤ 10 9  The number of elements in the list does not exceed 10 6  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 (Python):



from sys import stdin
from collections import deque

def main():
    n = int(input())
    dll = deque()

    for _ in range(n):
        line = stdin.readline().split()
        if line[0] == "insert":
            dll.appendleft(int(line[1]))
        elif line[0] == "delete":
            try:
                dll.remove(int(line[1]))
            except ValueError:
                None
        elif line[0] == "deleteFirst":
            dll.popleft()
        elif line[0] == "deleteLast":
            dll.pop()

    print((" ".join(map(str, dll))))

main()

Solution (Python):
from collections import deque
from sys import stdin

def read_and_print_DLList(lst, n):
    for _ in range(n):
        cmd = stdin.readline().strip().split()
        if cmd[0] == 'insert':
            lst.appendleft(cmd[1])
        elif cmd[0] == 'delete':
            if cmd[1] in lst:
                lst.remove(cmd[1])
        elif cmd[0] == 'deleteFirst':
            lst.popleft()
        elif cmd[0] == 'deleteLast':
            lst.pop()
    print(*lst, sep=" ")
    
n = int(input())

lst = deque([])

read_and_print_DLList(lst, n)

Solution (Python):
from collections import deque

q = deque()
for _ in range(int(input())):
    command = input().split()
    if command[0] == "insert":
        q.appendleft(command[1])
    elif command[0] == "delete":
        try:
            q.remove(command[1])
        except ValueError:
            pass
    elif command[0] == "deleteFirst":
        q.popleft()
    elif command[0] == "deleteLast":
        q.pop()
    
print(" ".join(q))

Solution (Python):
from collections import deque 

n=int(input())
a=deque()

for i in range(n):
    c=input()
    if c=="deleteFirst":
        a.popleft()
    elif c=="deleteLast":
        a.pop()
    else:
        c,v=c.split()
        if c=="insert":
            a.appendleft(v)
        else:
            try:
                a.remove(v)
            except:
                pass

print(" ".join(a))

Solution (Python):

from collections import deque
d = deque()
for i in range(int(input())):
    str = input().split()
    if str[0] == "insert":
        d.appendleft(str[1])
    elif str[0] == "delete":
        if str[1] in d:
            d.remove(str[1])
    elif str[0] == "deleteFirst":
        d.popleft()
    elif str[0] == "deleteLast":
        d.pop()
print(*d)