CS지식/자료구조

TIL 정리_62(자료구조)

ran4 2022. 4. 18. 22:37

removeLast 메서드 

리스트 끝으로 도달함을 확인하는 코드이다 
current == tail 
current.next = null //NullPointerException 발생할 수 있음
리스트가 비어있으면 null을 반환 

 


removeLast는 removeFirst와 방식이 같다

**removeFirst : 리스트가 비어있거나 요소가 한개만 있는 상황 등에도 잘 실행된다
-> 코드를 그대로 사용

 

 

removeLast 코드 구현

 

public E removeLast() {
if(head == null)
return null;
if(head == tail)
return removeFirst();  //요소가 하나인 리스트 -> 여기서 끝

//리스트의 요소 살펴보기
Node<E> current = head.previous = null;
while(current != tail) {
//순서가 중요
  previous = current;
current = current.next;
//current -> tail을 가리킴
previous.next = null; //previous.next는 이미 tail이기 때문에 null값으로 변경 
tail = previous
currentSize--;
return current.data;



remove와 find 
특정 요소를 리스트에서 제거
제거하고 싶은 위치를 파악해야 한다

public E remove(E obj) {
//제거하고자 하는 요소가 맞는지 확인
Comparable 인터페이스 사용
(((Comparable<E>) current.data).compareTo(obj) == 0); //두 객체가 같다는 의미이다 
-> compareTo 메서드 오버라이딩 -> 객체들에 할당된 메모리 값을 비교
-> remove를 사용하는 상황에서는 올바른 방법이 아니다 

 


제거하고자 하는 요소가 리스트의 맨 앞에 있는지 확인하기 위한 방법

  • current가 head를 가리키는지 확인한다
  • 다른 방법으로는 preivious가 null인지 확인한다
  • current와 tail이 같은 곳을 가리킬 때 removeLast를 사용한다


previous, current 포인터 작성

 

public E remove(E obj) {
Node<E> current = head.previous = null;
while(current != null) {
//제거하려는 요소가 맞는지 확인
if(((Comparable<E>)obj).compareTo(current.data)==0) {
if(current == head) //첫 요소인지 확인
return removeFirst(); //head tail 비교
if(current == tail) 
return removeLast();
currentSize--;
previous.next = current.next;
return current.data;
}
//찾고자 하는 요소를 찾은 후 첫 요소인지 마지막 요소인지 확인
previous = current;
current = current.next; 
}
return null;
}




참고사항
1. removeFirst removeLast가 remove 메서드가 반환하는 객체와 같은 타입인지
확인해야 한다
2. if(current == tail) 
return removeLast();
current가 tail인지 확인하는 코드가 필요한가?
3. 리스트가 비어있는 경우에는 별도의 코드 없이 while문으로 current 값이 null인지 확인하면 된다


주어진 객체가 아닌 연결리스트에 있는 객체를 반환하는 법 : 
person객체를 추가하여 redid 값을 알아내야 한다

 


Contains메서드 

 

public boolean contains(E obj) 
public E remove(E obj) {
Node<E> current = head;
while(current != null) {
if(((Comparable<E>)obj).compareTo(current.data) == 0) {
return true;
}
current = current.next;
}
return false;

 

'CS지식 > 자료구조' 카테고리의 다른 글

TIL 정리_64  (0) 2022.04.20
TIL 정리_63  (0) 2022.04.19
TIL 정리_60  (0) 2022.04.16
TIL 정리_59  (0) 2022.04.15
TIL 정리_58  (0) 2022.04.14