0

リンクされたリストを反転する問題の解決策である次の短いコードがあります。

void backwardslist(atom** head) {
atom* first;
atom* second;

if (*head == NULL) return; //if list is empty

first = *head;
second = first->next; // intuitive

if (second == NULL) return; 

backwardslist(&second); // recursive call with 2nd one as head, after we got variables
                     first and second

first->next->next = first; // when we get to the end, we rearrange it
first->next = NULL; // so last one is pointing to first, first is pointing to NULL

*head = second; // I dont understand this part, so the head is changing from the last, 
                   to the second element as the recursion goes to the beginning or am i 
                   missing something?

}

second=(再帰の 2 つのポインターの 2 番目へのポインター) ではありませんか?

ですから、最初は最後のものを指す必要があります。

しかし、再帰が元に戻ると、常に変化する *head から second になります。

使用されている 2 番目の ATM には何が入っていますか?

君たちありがとう

4

2 に答える 2

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;             

}

于 2014-04-19T21:25:18.157 に答える