Skip to content

ALDS1_3_C: Doubly Linked List

Problem Description

AIZU - ALDS1_3_C

Solution in Java

package AIZU.Accepted.ALDS1;


/**
 * @author Teerapat Phokhonwong
 * @Onlinejudge: AIZU ONLINE JUDGE
 * @Categories: ALDS1
 * @Problem: ALDS1_3_C - Doubly_Linked_List
 * @Link: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_C
 * @Timelimit: 1 sec
 * @Status: Accepted
 * @Memory: 188804 KB
 * @Submission: 2018-10-09 15:10
 * @Runtime: 01:10 s
 * @Solution: Doubly linkedList Simulation
 * @Note:
 */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class ALDS1_3_C_Doubly_Linked_List {

    static Node firstNode;
    static Node lastNode;

    static class Node {
        int data;
        Node prev;
        Node next;

        public Node(int data) {
            this.data = data;
        }
    }

    static void insertNode(int data) {
        Node xNode = new Node(data);
        if (firstNode == null) {
            firstNode = xNode;
            lastNode = xNode;
        } else {
            xNode.next = firstNode;
            firstNode.prev = xNode;
            firstNode = xNode;
        }
    }

    static void delete(int data) {
        Node cur = firstNode;
        while (cur != null) {
            if (cur.data == data) {
                if (cur == lastNode) {
                    deleteLast();
                    return;
                }
                if (cur == firstNode) {
                    deleteFirst();
                    return;
                }
                cur.next.prev = cur.prev;
                cur.prev.next = cur.next;
                return;
            }
            cur = cur.next;
        }
    }

    static void deleteFirst() {
        firstNode = firstNode.next;
        if (firstNode != null) {
            firstNode.prev = null;
        } else {
            lastNode = null;
        }
    }

    static void deleteLast() {
        lastNode = lastNode.prev;
        if (lastNode != null) {
            lastNode.next = null;
        } else {
            firstNode = null;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            String[] st = br.readLine().split(" ");
            String command = st[0];
            int data;
            switch (command) {
                case "insert":
                    data = Integer.parseInt(st[1]);
                    insertNode(data);
                    break;
                case "delete":
                    data = Integer.parseInt(st[1]);
                    delete(data);
                    break;
                case "deleteFirst":
                    deleteFirst();
                    break;
                case "deleteLast":
                    deleteLast();
                    break;
            }
        }

        Node cur = firstNode;
        boolean printed = false;
        while (cur != null) {
            if (printed) {
                bw.append(" ");
            } else {
                printed = true;
            }
            bw.append(cur.data + "");
            cur = cur.next;
        }
        bw.newLine();
        bw.flush();
    }
}