본문 바로가기
자바 알고리즘/자료구조

LinkedList(이중 연결 리스트)

by hoshi03 2023. 8. 27.

https://www.codetree.ai/missions/6/problems/integer-command-processing-8?&utm_source=clipboard&utm_medium=text

 

LinkedList<Integer> l = new LinkedList<>(); 형태로 이중연결리스트 사용

 

addFirst(E) - 맨 앞에 데이터 E를 추가

addLast(E) - 맨 뒤에 데이터 E를 추가

pollFirst() - 맨 앞에 있는 데이터를 반환하면서 리스트에서 삭제

pollLast() - 맨 뒤에 있는 데이터를 반환하며서 리스트에서 삭제

size() - 현재 list에 들어있는 데이터의 수

isEmpty() - 현재 list가 비어있다면 true, 아니라면 false

peekFirst() - list의 맨 앞에 있는 데이터를 반환

peekLast() - list의 맨 뒤에 있는 데이터를 반환합니다.

 

정수를 저장하는 연결 리스트를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하여보세요. 명령어는 총 8가지입니다.

  1. push_front A: 정수 A를 연결 리스트의 앞에 넣습니다.
  2. push_back A: 정수 A를 연결 리스트의 뒤에 넣습니다.
  3. pop_front: 연결 리스트의 가장 앞에 있는 수를 빼고, 그 수를 출력합니다.
  4. pop_back: 연결 리스트의 가장 뒤에 있는 수를 빼고, 그 수를 출력합니다.
  5. size: 연결 리스트에 들어있는 정수의 개수를 출력합니다.
  6. empty: 연결 리스트가 비어있으면 1을, 아니면 0을 출력합니다.
  7. front: 연결 리스트의 가장 앞에 있는 정수를 출력합니다.
  8. back: 연결 리스트의 가장 뒤에 있는 정수를 출력합니다.

입력:

13
push_back 1
push_front 2
push_front 3
pop_front
front
pop_back
back
size
empty
pop_back
push_front 3
empty
back
출력:

3
2
1
2
1
0
2
0
3

 

풀이 

 

import java.util.LinkedList;
import java.util.Scanner;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 변수 선언 및 입력
        int n = sc.nextInt();

        // 동적 배열 선언
        LinkedList<Integer> v = new LinkedList<>();

        for(int i = 0; i < n; i++) {
            String command = sc.next();

            if(command.equals("push_back")) {
                int num = sc.nextInt();
                v.addLast(num);
            }
            if(command.equals("push_front")) {
                int num = sc.nextInt();
                v.addFirst(num);
            }
            else if(command.equals("pop_back")) {
                System.out.println(v.pollLast());
            }
            else if(command.equals("pop_front")) {
                System.out.println(v.pollFirst());
            }
            else if(command.equals("size")) {
                System.out.println(v.size());
            }
            else if (command.equals("empty")){
                if (v.isEmpty()) System.out.println(1);
                else System.out.println(0);

            }
            else if (command.equals("front")){
                System.out.println(v.peekFirst());
            }
            else if (command.equals("back")){
                System.out.println(v.peekLast());
            }

        }
    }
}

'자바 알고리즘 > 자료구조' 카테고리의 다른 글

ArrayList  (0) 2024.05.18
Single Linked List  (0) 2024.05.18
리스트와 배열의 차이, 리스트 인터페이스  (0) 2024.05.14
iterator, Listiterator  (0) 2023.08.27
동적 배열  (0) 2023.08.27