연결리스트 자료구조를 구현하는 문제이다.
기본 Node클래스는 주어져있고, 삽입시 사용할 메서드만 완성하면 된다.
if (head == null) {//처음 시작할 경우
head = new Node(data);
return head;
} else {//next가 null인 경우를 찾아간다., 중간 매개변수 next 사용.
Node next=head;
while (true) {
if(next.next==null) {//
next.next = new Node(data);
return head;
}
next = next.next;//next를 node에 저장
}
}
}
내가 작성했던 코드이고
if(head == null)
return new Node( data);
else if(head.next == null){
head.next = new Node(data);
}
else{
insert(head.next,data);
}
return head;
}
다른사람이 작성한 코드중 가장 많은 추천을 받은 코드이다.
일단 문제 풀때도, 전에 자료구조 공부할 때 본 기억이 있어서
처음 발상은 금방 됬는데, 의사코드도 안적고, 절차도 적어놓지 않고 그냥 대충 코드만 써내려갔더니
계속 버그가 발생해서 안되겠다 싶어서 잠시 멈추고, 생각을 정리한다음 코드를 완성했다.
문제가 발생했던 부분은 hasNext부분을 직접 구현해야되는데, 매개변수를 안넣고 head에다 썻다가 next빼먹기도하고 head.next에만 집어넣어서 중간자료가 다 사라지고 난장판이였다.
아무튼, 다른 코드와 비교해보면 재귀함수를 써서 코드를 정리하고
첫번째 head삽입도 리턴을 동시에 해서 코드를 줄였다.
그런데, 코드는 깔끔하지만 재귀함수로 head.next를 head에 넣어서 찾아가는게 효율적일까? 하는 의문이 든다.
저렇게 하면 계속 콜스택에 insert가 쌓이고, 그만큼 data도 쌓이지 않나??
아직 공부가 부족해서, 어떤방법이 더 나은 방법인지 한눈에 들어오지가 않는다.
자료구조 공부도 계속 해야지 말만하고 집에와서 하질 않다가 쉽게 풀 수 있을 것을, 삽질했다 ㅠㅠ
열심히 공부하자.