2013-10-22 2 views
1

재귀 함수를 호출하는 드라이버 함수를 작성해야합니다. 나는 내가 운전자 기능에서 무엇을해야하는지 궁금해하고 있었다.재귀를 사용하여 링크 된 목록을 역전하는 문제

이 프로그램은 연결된 목록을 역전합니다.

void invert_r() 
{ 
    //This is the driver function for recursive_invert 

    nodeType<Type> *p, *q; 

    q = first; 
    p = first; 
    recursive_invert(q, p); 
} 
nodeType<Type>* recursive_invert(nodeType<Type> *q, nodeType<Type> *p) 
{ 
    //Invert a linked list using recursion. 
    //DO NOT create any new node in your implementation 
    if(p -> link == NULL) 
    { 
     q -> link = p; 
     return p; 
    } 
    else 
    { 
     recursive_invert(p -> link, q) -> link = p; 
    } 
    return p; 
} 
+0

하드 우리가 first'가 무엇인지 '볼 수없는 한 대답. 그렇지 않으면 모든 것이 잘 보입니다. 이 코드로 어떤 특수한 문제가 있습니까? –

+0

@ g-makulik "first"는 연결된 목록의 첫 번째 요소입니다. 나는 드라이버 함수의 사용법과 그것을 사용하고 내 재귀 함수를 호출하는 방법에 대해 혼란 스럽다. ... –

+0

함수의 출력은 먼저 반복적 인 방법으로 연결된리스트를 역으로한다. 재귀 적 호출을 위해 invert_r()을 구현하여 연결된 목록을 다시 변환하십시오. –

답변

0
void recursiveReverse(struct node** head_ref) 
{ 
    struct node* first; 
    struct node* rest; 

    /* empty list */ 
    if (*head_ref == NULL) 
     return; 

    /* suppose first = {1, 2, 3}, rest = {2, 3} */ 
    first = *head_ref; 
    rest = first->next; 

    /* List has only one node */ 
    if (rest == NULL) 
     return; 

    /* reverse the rest list and put the first element at the end */ 
    recursiveReverse(&rest); 
    first->next->next = first; 

    /* tricky step -- see the diagram */ 
    first->next = NULL;   

    /* fix the head pointer */ 
    *head_ref = rest;    
} 
+0

코드가 OP 코드처럼 보이지 않습니다. 그것은 다른 서명과 다른 구조 구성원을 가지고 있습니다. –

+0

John Algo처럼 일러스트레이션 목적으로 만 사용됩니다. –

+0

질문의 * 특정 * 문제를 해결할 수있는 답변을 기대합니다. 매우 관련성이 높은 대안을 갖고 계시다면 * 고려해 볼 수 있습니다. 그러나 질문에 답하고 반드시 이유를 먼저 설명하십시오. –

관련 문제