이 질문은 이미 질문되었지만 재귀를 사용하여 해결하고 싶습니다. 리스트의 각 노드는 정수 값 (int val)을 포함합니다. 정수 값을 반환하고 싶습니다. 그냥 인쇄하는 것이 아닙니다. 나는 다음과 같은 내놓았다 : 나는리스트의 마지막에 도달하면재귀를 사용하여 단일 연결 목록에서 n 번째 노드에서 마지막 노드 찾기
int findKthNode (node* head, int n){
if(!head)
return 1;
int retval = findkthNode(head->next, n);
if(retval==n)
return head->val;
return 1+retval;
}
, 나는 내가 끝에서 n 번째 노드에 도달 할 때까지 나는 이전의 반환 값에 1을 추가 그 후 1을 반환합니다. 그 시점에서 그 노드에서 int 값을 반환합니다. 이 접근법에는 한 가지 문제점이 있습니다. 첫 번째 통화로 돌아갈 때까지 1을 계속 추가합니다. 그래서 내 목록이 1,5,10204080100이라면 돌아 오기 전에 1 5 번 더 추가 할 것이므로 80 대신 n = 2로 85를 반환하게됩니다. 어떻게 해결할 수 있을까요?
또한 이것이 가능한지 확실하지 않지만 재귀를 사용하여 n 번째 마지막 노드에 대한 포인터를 반환하는 방법이 있습니다. 나는 하나의 연결된 목록으로 이것을 할 수있는 방법을 볼 수 없습니다.
그리고 목록에 적어도 'n'값이 없으면 어떻게해야합니까? –
@JimMischel Good Point. 현재, 내 함수는 단지 1을 더한 목록의 항목 수를 반환합니다. 이는 반드시 나쁜 것은 아닙니다. -1 또는 목록의 항목 수를 반환하도록 변경하면 더 좋을 것입니다. –
이 답변보기 http://stackoverflow.com/questions/40724339/efficiently-finding-nth-from-last-element-in-a-linked-list/40724340?noredirect=1#comment68683709_40724340 –