2017-06-09 65 views
-2

我堅持着這片代碼,我在考試的模擬發現:C - 鏈表:這個函數應該輸出什麼?

struct node{ 
    int val; 
    struct node* next; 
}; 

struct node* list; 

struct node* function (struct node* p){ 
     struct node *temp, *prec = NULL; 
     if (p!=NULL){ 
      while(p->next!=NULL){ 
       temp=prec; 
       prec=p; 
       p=p->next; 
       prec->next=temp; 
       } 
       p->next=prec; 
     } 
     return p; 
    } 

我試着編譯它,顯示的輸出是一個反向列表。例如:如果我的列表由1,2,3和4組成。顯示的輸出是4,3,2和1.我的問題是:有人能解釋我在while循環內發生了什麼嗎?

+0

正確的,根據該規範? –

+0

我測試中的問題說:根據輸入中給出的列表,運行「list = function(list);」之後列表將會是什麼?聲明? – K4lab

+0

所以...不是你的「問題」回答這個問題嗎? –

回答

0

我改名變量,使事情更清晰:

struct node* function (struct node* current_node){ 
    struct node *temp;    
    struct node *previous_node = NULL; 
    if (current_node!=NULL){ 
    while(current_node->next!=NULL){ 
     temp    = previous_node;  //Save pointer to upstream node 
     previous_node  = current_node;  //Make previous node the current node 
     current_node  = current_node->next; //Move to the next node 
     previous_node->next = temp;    //Set the previous node to point to the previous previous node 
    } 
    current_node->next=previous_node;   //Set final node to point to last previous node 
    } 
    return current_node; 
}