자료구조 & 알고리즘/선형 자료구조

[자료 구조] 연결리스트(LinkedList) in java

2023. 6. 16. 17:45
목차
  1. 연결리스트의 구조와 특징
  2. 연결리스트의 관련 메서드
  3. 연결리스트의 삭제
  4. 연결리스트의 삽입 
  5. 연결리스트의 구현
  6. 참고할 만한 문제 :

연결리스트의 구조와 특징

LinkedList를 단일리스트로 설명하는 그림
LinkedList를 단일리스트로 설명하는 그림

연결리스트(LinkedList)란? Collection Framwork내에 있는 List 컬렉션 중 하나(List의 일부).

List의 종류 > ArrayList(리스트로 생성되나 성격은 array와 더 비슷하다. 동적배열이라고 생각하면 쉬움), LinkedList

List는 객체 자체를 저장하지 않고 객체의 번지(메모리 주소)를 저장한다. 그러나 이러한 객체의 번지는 array와 ArrayList와 달리 연속적이지 않다. 또한 맨 처음 부분인 head와 맨 끝부분 tail으로 구분 된다.

데이터가 저장된 메모리공간을 대략적으로 그린 그림
데이터가 저장된 메모리공간을 대략적으로 그린 그림

위의 그림은 정확하진 않겠지만 데이터들이 Array, ArrayList와 달리연속적으로 저장되지 않는다는 것을 알려주고 싶어 그림을 첨부했다.

 

+ LinkedList 컬렉션은 이중 연결 리스트를 구현한 것이다. 따라서 this.prev, this.next로 연결된 앞과 뒷쪽 모두 접근 가능하다.

 

특징은 삽입, 삭제가 O(1)로 매우 빠르고, 검색과 접근은 O(n)으로 ArrayList에 비해 느리다는 것이다.

연결리스트의 관련 메서드

메서드 기능 시간복잡도
addFirst(Object obj)
add(int idex, Object obj)
add(Object obj)
addLast()
첫번째 위치로 obj를 추가합니다.
지정된 위치(index)에 obj를 추가합니다.
맨 끝에 obj를 추가합니다.
맨 끝에 obj를 추가합니다.
O(1)
idx를 찾는 시간 + O(n)
O(n)
O(1)
removeFirst()
remove(Object o)
removeAll(Collection c)
첫번째 요소를 반환한 후 삭제합니다. O(1)

peek()
peekFirst()
첫번째 요소(head) 값을 반환합니다. O(1)
get(int idex) 지정된 위치(index)에 있는 값을 반환합니다. O(n)

-> 더 많은 메서드가 존재한다.

스택,큐처럼 peek(), poll()등으로 조회와 삭제가 가능하고 First, Last 부분을 구분해주는게 이해가 안됐는데 알고보니 인터페이스 Deque도 상속받는다. !! 인터페이스를 이래서 사용하는구나 싶다. 다중상속이 가능하니 메서드를 이거저거 다양하게, 다형성을 이용할수있겠다.

List와 Deque 인터페이스를 모두 상속받아 만들어지는 LinkedList의 모습
List와 Deque 인터페이스를 모두 상속받아 만들어지는 LinkedList의 모습

 

연결리스트의 삭제

연결리스트 데이터 삭제
연결리스트에 데이터 삭제하는 모습

기본 연결리스트에서 data3을 삭제할때 다음과 같이 data2의 next가 data4의 주소로 바뀐 것을 알 수 있다. 

연결리스트의 삽입 

연결리스트 데이터 삽입
연결리스트에 데이터를 삽입하는 과정

앞전에 연결리스트 그대로 data5를 data1과 data2의 사이에 삽입하고 싶을 때 다음과 같이 data1의 next는 data5의 주소를 가르키고, data5의 next부분이 data2의 주소를 가리키고 있는 것을 알 수 있다.

연결리스트의 구현

import java.util.LinkedList;

LinkedList objList = new LinkedList(); // 제네릭 미사용시 type은 Object다.
LinkedList<String> strList = new LinkedList<String>(); // 주로 제네릭 사용
LinkedList<Integer> intList = new LinkedList<>(); // new에서 타입 생략가능

참고할 만한 문제 :

 https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형

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

[자료 구조] 배열 (Array) in java  (0) 2023.06.14
[자료 구조] 큐 (Queue ) in java  (0) 2023.06.13
[자료 구조] 스택 (Stack) in java  (0) 2023.06.12
  1. 연결리스트의 구조와 특징
  2. 연결리스트의 관련 메서드
  3. 연결리스트의 삭제
  4. 연결리스트의 삽입 
  5. 연결리스트의 구현
  6. 참고할 만한 문제 :
'자료구조 & 알고리즘/선형 자료구조' 카테고리의 다른 글
  • [자료 구조] 배열 (Array) in java
  • [자료 구조] 큐 (Queue ) in java
  • [자료 구조] 스택 (Stack) in java
three von
three von
어려워 보이는 프로그래밍 언어를 쉽게 정복하는 블로그
반응형
three von
LangEASY : 프로그래밍 언어를 쉽게 정복하는 공간
three von
전체
오늘
어제
  • 분류 전체보기 (89)
    • BackEnd (5)
    • JAVA (5)
      • 기초개념 (5)
    • 자료구조 & 알고리즘 (7)
      • 기초수학 (0)
      • 선형 자료구조 (4)
      • 비선형 자료구조 (1)
      • 알고리즘 (1)
    • CS (18)
      • 컴퓨터구조 (0)
      • 운영체제 (3)
      • 시스템 소프트웨어 (0)
      • 네트워크 (4)
      • 디자인패턴 (10)
    • 데이터베이스 (4)
    • Spring (4)
    • Project (2)
      • 팀프로젝트 (1)
      • 토이프로젝트 (1)
    • 회고 (0)
    • Git&Github (8)
    • IntelliJ (5)
    • 코테 (16)
      • 프로그래머스 (10)
      • 백준 (6)
    • BookStudy (12)
      • 스프링 부트 핵심 가이드 (12)
    • C++ (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 제로베이스백엔드스쿨
  • 백엔드공부
  • vi/vim
  • 자바 자바해시맵
  • github이슈관리
  • 명령어변환
  • 백엔드
  • 제로베이스
  • windowcmd창
  • 리눅스 명령어 윈도우 cmd창에서 가능
  • 윈도우에서 리눅스 명령어
  • 개발자
  • heap 자료구조
  • github
  • 코테
  • 인텔리제이에서 gitbash로 vi vim 에디터 사용하는법
  • 제로베이스백엔드스쿨미니과제
  • vi/vim에디터사용
  • 자바 자료구조 힙
  • 백엔드 스쿨
  • 깃 이슈관리
  • LiveTemplate사용
  • java heap 자료구조
  • githubTest
  • IntelliJ 자동화
  • 백엔드스쿨
  • 자바 선형자료구조
  • spring
  • Java
  • InteliJ에서 gitbash사용

최근 댓글

최근 글

hELLO · Designed By 정상우.
three von
[자료 구조] 연결리스트(LinkedList) in java
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.