일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Bruteforce
- 프로그래머스
- Sort
- 완전탐색
- algorithm
- 매개변수 탐색
- lcap
- 알고리즘
- 재귀
- 멘딕스
- microflow
- 해시맵
- 자료구조
- 집합
- 자바
- domain model
- 반효경교수님
- SQL
- 그래프
- Mendix
- dfs
- git
- 가중치없는그래프
- 트리
- 스택
- 백트래킹
- 이분탐색
- Recursion
- MySQL
- 정렬
- Today
- Total
mondegreen
연결리스트(LinkedList) 본문
자료의 논리적인 순서와 메모리 상의 물리적인 순서가 일치하지 않음
자료 크기를 동적으로 조정 가능함에 따라 메모리를 효율적으로 사용할 수 있음
개별적으로 위치하는 각 원소를 노드의 링크 필드로 연결한다.
연결리스트는 헤드와 노드로 구성되어 있으며 Head는 Link만 존재하며 첫 노드에 대한 참조값을 가지고 있다.
Node는 원소값을 가지는 DATA 필드와 다음 노의 참조값을 가지는 LINK 필드로 이루어져 있다.
만약 노드의 링크 필드가 null이라면 해당 연결리스트의 마지막 원소라고 볼 수 있다.
노드를 중간에 삽입할 경우 유의할 사항
A와 C로 이루어진 연결 리스트 중간에 새로운 노드 B를 추가할 때, A 링크 필드에는 B의 주소값이 들어가고 B의 링크에는 C의 주소값을 넣어줘야 하는데 후자를 먼저 수행해야 한다. 그 이유는 전자를 먼저 수행할 경우, C의 주소값이 사라지기 때문이다.
LinkedList<String> list = new LinkedList<>();
위와 같이 연결리스트를 구현할 수 있다.
주요 메서드
데이터 삽입 add / addFirst / push => 예외 발생 가능 (따라서 offer 메서드 사용추천)
list.add("b");
list.add(0,"a");
참고. 데이터 tail에 추가 => addLast
데이터 확인 get
System.out.println(list.get(0)); // "a" 출력
참고. getFirst, element, peek, peekLast 모두 첫번째값 출력, getLast 마지막 값 출력
데이터 변경 set
list.set(0, "z");
연결리스트 전체 출력 list
System.out.println(list); // [z, b]
데이터 첫번째 값 삭제: poll, pollFirst, pop, removeFirst
데이터 마지막 값 삭제: pollLast, removeLast
연결리스트의 크기: size
list.contains(1): list에 1이 있는지 검색
list.indexOf(1): 1이 있는 index반환, 없으면 -1
** 이중 연결리스트는 데이터와 pre, next로 이루어져 있으며 pre는 앞 노드의 참조값을 next는 다음 노드의 참조값을 가진다.
'알고리즘 풀이 및 리뷰 > 알고리즘 이론' 카테고리의 다른 글
탐욕 알고리즘(Greedy Algorithm) (1) | 2023.06.19 |
---|---|
트리 (0) | 2023.06.16 |
스택(Stack)과 큐(Queue) (0) | 2023.06.05 |
부분집합(Subset) (0) | 2023.06.05 |
조합(Combination; 순서 X 중복 X) (0) | 2023.06.05 |