2013-07-17 64 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;