Home Forums Forums US Life 다음 5개함수 중 가장 잘 쓴 함수라고 생각되는 함수는? 이유는? 틀렸다고 생각되는 함수는? 리스트의 뒤에서 N번째 노드 지운 리스트 리턴하기
n이 너무 클 경우 slow, fast 간격이 n만큼 유지가 안 돼요 –> 투포인터의 전형적인 문제. 이경우는 패스트 포인터를 먼저 츨발시켜 n 번째 노드까지 전진시킴. 그후 슬로우 포인터를 출발시킴. 이때 패스트노드와 슬로우 포인터의 속도가 같으므로 등간격을 유지하게 됨. 여기서 n 은 리스트 노드들의 전체수보다 작거나 같은 양수임. n이 무한정 큰 수가 아님. 리스트 사이즈보다는 작아야지. (그러니 테스트를 하려면 리스트를 빌드하는 과정이 중요하네. 그래야 메인함수에서 n의 한계를 정해줄수있으니. 그리고 제대로 함수를 만들려면 함수매개변수로 리스트의 싸이즈를 포함시켜주면 좋겠네. 아니면 먼저 싸이즈를 재고나서 시작하던지. 그러고보니 제대로 코딩할려면 사소하게 생각되건것들도 고려할게 점점 늘어나네 ㅋ) 메모리리크는 고려되지 않았음. 헤드가 널포인터인 경우도 고려되지 않았음. 헤드가 널이면 이 문제 자체가 성립안하므로 사실 고려하는게 이 문제의 중요한 사항이 아님 그냥 널체킹하기 위한 이프문 하나 더 넣으면 그만임.ㅋㅋ
리턴타입을 ListNode* 로 명확히 해서 리턴을 명확히 해주는게 읽기에 편하기는 하지만, 3의 경우처럼 보이드 타입으로 쓰는게 장점이 있을때가 있어요. 컴파일러 에러가 나는게 어떤 컴파일러인가요? 포인터나 레퍼런스 함수 매개변수로 썼다고해서 컴파일러 에러가 난건 아닐거에요. 그럴경우는 아마 아래 테스트 코딩의 경우처럼 보이드 리턴을 ( return; ) 확실하게 써줘야 컴파일러에러가 나지 않나보군요. ((업데이트: 구글해보니 Best practice: Do not put a return statement at the end of a non-value returning function. 이런 말이 나오니 return; 을 안써주는게 낫다고 하는데 왜 컴파일 에러가 난다고 하는지 모르겠네요.))