이 글에서는 연결 리스트(LinkedList)의 첫 번째 위치와 마지막 위치에 요소를 추가하는 방법을 알아보겠습니다.
자바의 java.util.LinkedList 클래스는 이중 연결 리스트(doubly-linked list)에서 기대할 수 있는 표준적인 연산들을 제공합니다. 인덱스를 사용하는 연산을 수행할 때는 지정된 인덱스에 더 가까운 쪽, 즉 리스트의 시작 또는 끝 중 가까운 곳부터 순회하여 효율적으로 동작합니다.
요소를 추가할 때는 내장 메서드인 addFirst()와 addLast()를 사용하면 됩니다.
예시 입출력
입력값:
입력 리스트: [Java, Scalaa, C++]
기대 출력값:
요소 추가 후 리스트: [JVA, Java, Scalaa, C++, Spark]
알고리즘
Step 1 - 시작한다. Step 2 - LinkedList 객체 input_list를 선언한다. Step 3 - 값을 정의한다. Step 4 - 내장 함수 addFirst()와 addLast()를 사용하여 각각 첫 번째와 마지막 위치에 요소를 추가한다. Step 5 - 결과를 출력한다. Step 6 - 종료한다.
예제 1: main 메서드에서 모든 연산 처리하기
아래 예제는 모든 연산을 하나의 main 메서드 안에서 함께 수행하는 방식입니다.
import java.util.*;
public class Demo {
public static void main(String args[]){
LinkedList<String> input_list = new LinkedList<String>();
input_list.add("Java");
input_list.add("Scalaa");
input_list.add("C++");
System.out.println("정의된 리스트: " + input_list);
input_list.addFirst("JVA");
input_list.addLast("Spark");
System.out.println("요소 추가 후 리스트: " + input_list);
}
}출력 결과
정의된 리스트: [Java, Scalaa, C++] 요소 추가 후 리스트: [JVA, Java, Scalaa, C++, Spark]
예제 2: 객체 지향 방식으로 함수 분리하기
다음 예제는 연산 로직을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍(OOP) 스타일로 구현한 것입니다. 이렇게 하면 코드의 재사용성과 가독성이 향상됩니다.
import java.util.*;
public class Demo {
static void add_elements(LinkedList<String> input_list){
input_list.addFirst("JVA");
input_list.addLast("Spark");
System.out.println("요소 추가 후 리스트: " + input_list);
}
public static void main(String args[]){
LinkedList<String> input_list = new LinkedList<String>();
input_list.add("Java");
input_list.add("Scalaa");
input_list.add("C++");
System.out.println("정의된 리스트: " + input_list);
add_elements(input_list);
}
}출력 결과
정의된 리스트: [Java, Scalaa, C++] 요소 추가 후 리스트: [JVA, Java, Scalaa, C++, Spark]
핵심 정리
addFirst(E e): 리스트의 맨 앞에 요소를 추가합니다.addLast(E e): 리스트의 맨 뒤에 요소를 추가합니다.- 두 메서드 모두 시간 복잡도가 O(1)이므로 매우 빠르게 동작합니다.