visualgo.net 접속하기!
Linked List에서 데이터를 삭제하는 과정을 시각적으로 확인해보고, 코드도 살펴보자.
<수행되는 코드 확인하기>
1.
Vertex pre = head
>>pre라는 노드를 헤드로 지정한다.
'현재 head와 pre는 똑같이 15라는 노드를 가리키고 있다'
2.
for (k=0 ; k < i-1 ; k++)
pre = pre.next
먼저, 나는 인덱스3에 있는 데이터를 삭제하려고 i=3으로 입력했다.
그럼 인덱스2에 pre라는 자리를 줘야 한다. 인덱스3 이전 노드의 정보가 필요하니까!
그럼, 첫번째 노드부터, 인덱스2 노드까지 .next를 이용하여 가야 한다.
pre = pre.next가 그것이다. k=0,1에서 수행이 된다.
3.
Vertex del = pre.next, aft = del.next
간단하다.
삭제하고자 할 노드를 일단 del이라는 변수에 할당해줘야 한다.
"삭제할 노드를 바로 삭제하지 않는다."
내가 삭제할 노드는 pre다음 노드니까, Vertex del = pre.next
또한, 삭제할 노드 다음 노드도 정보가 있어야, 삭제할 노드가 삭제된 뒤 pre노드와 이어줄 수 있다.
"삭제할 노드의 next가 누구인지 정해야 하기 때문이다"
"43이라는 노드를 아는 노드는 6이라는 del노드뿐이기 때문이다"
그래서 Vertex aft = del.next
4.
pre.next = aft
코드 그대로 이해하면 된다.
주의해야 할 점은 아직 del.next = aft이다.
5.
delete del
이제 del을 제거해도 된다.
각각의 노드가 다음 노드를 알고있기 때문에, 바로 삭제하지 않고 위와 같은 복잡한 과정을 거쳐야 한다.
점조직 같은 느낌이다.
ArrayList : 중간 데이터를 삭제하고, 그 빈자리를 메꾸기 위해서 뒤에 있는 엘리먼트를 한칸씩 쫘라락 옮겨야 한다.
그래서 Linked List보다 느리다.
그래서 Linked List가 더 빠르고 성능이 좋다고 말하는 것이다.
'자료구조 + 알고리즘' 카테고리의 다른 글
[자료구조] LinkedList 구현 - 객체생성[Java] (0) | 2020.04.21 |
---|---|
[자료구조] Linked list 데이터 조회 [VisuAlgo.net] (0) | 2020.04.02 |
[자료구조] Linked list 데이터 추가 [VisuAlgo.net] (0) | 2020.03.30 |
[자료구조] Linked list의 구조 (0) | 2020.03.28 |
[자료구조] 원소를 무한히 저장하는 ArrayList 구현하기 [JAVA] (0) | 2020.03.28 |