2013-07-17 3 views
0

Данная позиция, как я могу возвратить значение этой позиции, а также удалить это значение из связанного списка?Удаление и возвращаемое значение из связанного списка

То, что у меня есть, я думаю, работает только для удаления значения, но не возвращающего его.

int i; 
node *tmp = head; 
for(i=0 ; i<pos; i++) 
    tmp = tmp->next; 
node* tmp2 = tmp->next; 
tmp->next = tmp->next->next; 
free(tmp2); 
return 0; 
+0

Не освободить его или скопировать это значение в новой выделенной памяти. –

+0

сохраните значение в другой переменной, затем сделайте свободное, затем верните эту переменную. – Ishmeet

+0

Кроме того, вы ошибаетесь, вы не проверяете, достигнут ли конец? –

ответ

3

Используйте некоторую локальную память для хранения данных и возврата их после удаления.

int i; 
int data = 0; //for storing data 
node *tmp = head; 
for(i=0 ; i<pos && tmp != NULL; i++) //Added for checking end of list 
    tmp = tmp->next; 
node* tmp2 = tmp->next; 
tmp->next = tmp->next->next; 
data = tmp2->data; //copy data to local struct before deleting 
free(tmp2); 
return data; //return the data 
0

Предполагая, что позиция начинается с 1

int i; 
int data=0; 
node *temp; 
node *del; 
// Do manipulaion if list is not empty 
if(head!=NULL) 
{ 
    //handles removal of head  
    if(pos==1) 
    { 
     del=head; 
     head=del->next; 
     data=del->data; 
    } 
    else 
    {  
     for(i=1,temp=head;i<pos-1 && temp!=NULL; i++,temp=temp->next); // Iterates till previous positon 
     // handles if input position is greater than list size 
     if(temp && temp->next) 
     { 
      del=temp->next; 
      temp->next=del->next; 
      data=del->data; 
     } 
    } 

    free(del); 
} 
return data; 
Смежные вопросы