알고리즘 연습 사이트
Day 24:More Linked Lists
Linked List 관련 3번째 문제이다.
자료구조 관련 문제는 역시 어렵지만 풀고나면 재밌다.
이 문제의 포인트는 노드들의 첫 시작 주소인 head 참조값을 잘 갖고 있다가 반환해야 한다는 것이다.
다음 노드의 참조 값을 변수로 가지고 있는 노드들 리스트의 head 노드의 참조값이 메소드 인자로 주어지고, 이 노드 리스트의 data 변수에 있는 값 중 중복된 값을 제거하라는 문제이다.
다만 항상 data가 오름차순으로 정렬된 노드 리스트가 주어진다.
class Node{
int data;
Node next;
Node(int d){
data=d;
next=null;
}
}
public static Node removeDuplicates(Node head) {
if(head == null) //head가 null일 때 처리
return null;
Node s = head; // s 변수에 head 참조 값을 저장한다.
while(s.next != null){//while안에서 s변수를 이용하여 노드리스트들을 조작한다.
if(s.data == s.next.data)//현재 노드의 data값과 다음노드의 데이터값이 일치하면
s.next = s.next.next; //현재 노드 next 변수에 노드 하나를 건너뛴 다음의 주소값을 저장한다.
else // 중복되지 않으면
s = s.next; //다음 노드 참조값을 s에 대입한다.
}
return head;
}
return을 할 때는 s 참조 변수가 아닌 head 변수를 반드시 리턴해야한다.
잘 생각해보면 s는 while문이 돌면서 값이 계속 변경되고 있어서 head값은 이미 잃어버린 상태이다.
결국 모든 노드리스트들의 첫 시작 지점 주소 값인 head 를 리턴하면 될 것이다.
댓글 없음:
댓글 쓰기