从链表中删除和返回值

时间:2013-07-17 06:09:39

标签: c linked-list

给定位置,我将如何返回给定位置的值,并从链表中删除该值?

我认为,我只能删除一个值,但不会返回它。

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;

2 个答案:

答案 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

答案 1 :(得分: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;