C#의 LinkedList<T>는 각 노드가 앞뒤 노드에 대한 참조를 함께 가지는 이중 연결 리스트(Double Linked List) 구조입니다. 이번 글에서는 연결 리스트에 담긴 노드 중 특정 값을 가진 노드를 Remove() 메서드를 사용해 제거하는 방법을 예제와 함께 살펴보겠습니다.
LinkedList 생성하기
먼저 문자열 배열을 기반으로 노드로 구성된 LinkedList를 만들어 보겠습니다.
string[] students = {"Katie", "Jennifer", "Amy", "Vera"};
LinkedList<string> list = new LinkedList<string>(students);위 코드를 실행하면 "Katie", "Jennifer", "Amy", "Vera" 네 개의 노드가 순서대로 저장된 리스트가 생성됩니다.
Remove() 메서드로 노드 제거하기
이제 문자열 요소 "Vera"를 가진 노드를 제거해 보겠습니다. LinkedList 클래스가 기본으로 제공하는 Remove() 메서드를 호출하면 됩니다.
list.Remove("Vera");Remove(T value) 메서드는 지정한 값과 일치하는 첫 번째 노드를 찾아 리스트에서 제거합니다. 값이 정상적으로 제거되면 true를 반환하고, 해당 값이 리스트에 존재하지 않으면 아무 작업 없이 false를 반환합니다.
전체 예제 코드
using System;
using System.Collections.Generic;
class Demo {
static void Main() {
string[] students = {"Katie", "Jennifer", "Amy", "Vera"};
LinkedList<string> list = new LinkedList<string>(students);
foreach (var stu in list) {
Console.WriteLine(stu);
}
// 노드 제거
list.Remove("Vera");
Console.WriteLine("노드 제거 후 LinkedList...");
foreach (var stu in list) {
Console.WriteLine(stu);
}
}
}실행 결과
Katie Jennifer Amy Vera 노드 제거 후 LinkedList... Katie Jennifer Amy
실행 결과를 보면 처음 출력된 목록에는 "Vera"가 포함되어 있지만, Remove("Vera") 호출 이후에는 해당 노드가 삭제되어 세 개의 요소만 남은 것을 확인할 수 있습니다.
추가 팁: 성능 관련 참고 사항
Remove(T value)는 값을 기준으로 노드를 처음부터 순차 검색하므로 최악의 경우 O(n)의 시간 복잡도를 가집니다. 반면, 이미 제거하려는 노드의 참조(LinkedListNode<T>)를 알고 있다면 Remove(LinkedListNode<T>) 오버로드를 사용해 O(1) 시간 안에 즉시 제거할 수 있으므로, 상황에 맞게 적절한 메서드를 선택하는 것이 좋습니다.