2013-03-18 93 views
0

我無法弄清楚我的插入函數有什麼問題。遞歸/鏈表

基本上在主函數中我要求用戶輸入一個整數,它應該遍歷整個列表RECURSIVELY並按順序插入數字。如果你需要其他東西,請告訴我。

當我打印出來的清單隻打印出0次

In the main: 
      **This is looped** 
    printf("Enter the value you want to insert: "); 
    scanf(" %d", &integer); 
    current = insert(&head, integer); 
    temp = current; 

    while(temp) 
    { 
     printf("%d\n", temp->num); 
     temp = temp->next; 
    } 


node* insert(node** head, int integer) 
{ 
    node* temp = malloc(sizeof(node)); 
    node* temp1; 
    node* new; 

    if(*head == NULL) 
    { 
     temp->num = integer; 
     temp->next = *head; 
     *head = temp; 
    } 
    else if((*head)->num > integer) 
    { 
     temp = *head; 
     temp1 = temp->next; //breaks the link 
     temp->next = new; //creates a new node 
     new->num = integer; //adds int 
     new->next = temp1; //links new node to previously broken node 
     *head = temp; 
    } 

    else 
     insert(&((*head)->next), integer); 

    return(temp); 
} 

非常感謝!

+0

你在哪裏設置新值? – John3136 2013-03-18 11:32:30

+0

你是什麼意思? – juice 2013-03-18 11:46:23

+0

爲什麼你想用遞歸做這件事有什麼特別的理由嗎?這似乎沒有任何意義。 – Lundin 2013-03-18 11:53:21

回答

3
if(*head == NULL) 
{ 
    (*head)->next == temp; 
    temp->num = integer; 
    temp->next = *head; 
    *head = temp; 
} 

這是錯誤的,並且會導致無效的讀取,因爲* head爲NULL,因此(*head)->next無效。它會從NULL + offset讀取。其中offset取決於您的node數據類型的定義。

+1

但是,OP的'=='而不是'='(我認爲是這個意圖),所以它是一個無效的讀取,比無效的寫入更安全;-) – John3136 2013-03-18 11:33:43

+1

確實,很好的接收。 – Intrepidd 2013-03-18 11:34:14

+1

謝謝..意味着要做=但是無論如何它仍然是錯誤的。 – juice 2013-03-18 11:46:44

1
while(temp) 
{ 
    printf("%d\n", current->num); 
    temp = temp->next; 
} 

我想你想被打印出來temp->num而不是current->num

+0

大聲笑,幫助...但如果我輸入7,然後3 ..它仍然打印出0 3 – juice 2013-03-18 11:56:50