-
리스트 : 데이터를 순서대로 나열한 자료구조.
1. 선형리스트 (linear list)
가장 단순한 구조를 이루고 있는 리스트 .
리스트의 데이터는 노드 또는 요소라고한다. 각각의 노드는 데이터와 다음 노드를 가리키는 포인터를 가지고 있음.
2. 연결리스트(Linked list)
연결 리스트에 데이터를 삽입할때 노드용 객체를 만들고, 삭제할때 노드용 객체를 없앤다.
ptr 값이 널이 아니면 while문을 실행한다. ptr 값이 널이면 스캔할 노드가 없음을 의미하기 때문에 while문을 빠져나와 null을 리턴한다.
if문의 조건을 판단하기 위해 데이터 obj와 스캔하고 있는 노드의 데이터 ptr.data를 comparator c로 비교. compare 메서드가 반환하는 값이 0이면(The result is zero if the strings are equal, compareTo returns 0 exactly when the equals(Object) method would return true.) 종료 조건이 성립하여 검색 성공.
* 머리에 노드를 삽입하는 메서드.
1)삽입전의 머리 노드 a 에 대한 포인터를 PTR에 대입.
2) 삽입할 노드 G를 new Node<E>(obj,ptr)에 의해 생성합니다. 노드의 데이터는 obj가 되고 뒤쪽 포인터가 가리키는 곳은 ptr(삽입 전의 머리 노드 A)이 된다. 그리고 생성한 노드를 참조하도록 head를 업데이트함.
* 꼬리에 노드를 삽입하는 메서드.
1) 리스트가 비어 있는지 아닌지 먼저 확인 (head == null).
- 리스트가 비어있는 경우 : 머리에 노드를 삽입하는작업과 같다.
- 리스트가 비어있지 않는 경우 : 리스트 꼬리에 노드 G를 삽입.
- 삽입할 노드 G를 new Node<E>(obj, null)에 의해 생성한다. 생성한 노드 G의 데이터는 obj가 되고 뒤쪽 포인터가 참조하는 곳은 널이 된다. 노드 F의 뒤쪽 포인터 ptr.next가 참조하는 곳이 새로 삽입한 노드 G가 되도록 업데이트.
* 꼬리 노드를 삭제하는 removeLast메서드
- 리스트에 노드가 1개만 있는 경우 : 머리 노드를 삭제하는 작업. removeFirst 메서드로 처리
- 리스트에 노드가 2개 이상 있는 경우