2019년 5월 13일 월요일

Hackerrank Day 24 More Linked Lists







알고리즘 연습 사이트


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 를 리턴하면 될 것이다.



댓글 없음:

댓글 쓰기