2015-12-06 2 views
-4

Я хочу удалить узел из связанного списка .but не работает. вот мой код:удалить узел в связанном списке не работает в c

jL Delete(jL* node,int n) 
{ 
jL first1, n_th, save; 
int count = 0; 
save = first1 = n_th = (*node); 
while(first1->next) 
{ 
    first1 = first1->next; 
    count++; 
    if(count == (n-1)) 
    break; 
} 


while (first1->next != NULL) 
{ 
    first1 = first1->next; 
    save = n_th; 
    n_th = n_th->next; 
} 

save->next = n_th->next; 
free(n_th); 
return (&node);} 

где моя ошибка? вы можете мне помочь

+0

Показывать объявления данных, изменять локальные копии, возвращает адрес параметра. Этого должно быть достаточно, чтобы продолжать. –

+0

Ох и отладчик ........... DCV –

+0

Я отбросил ваше редактирование - если вы хотите удалить свой вопрос, пожалуйста, сделайте это, но не просто удалите код - это делает ваш вопрос невозможно понять, плюс это делает существующие ответы бесполезными. –

ответ

1

Кажется, вы хотите следующее. Я полагаю, что индексы элементов в начале списка из 0.

jL Delete(jL* node, int n) 
{ 
    jL current = *node; 
    jL prev = NULL; 

    while (current != NULL && n != 0) 
    { 
     prev = current; 
     current = current->next; 
     --n; 
    } 

    if (n == 0 && current != NULL) 
    { 
     if (prev == NULL) *node = current->next; 
     else prev->next = current->next; 

     free(current); 
    } 

    return *node; 
} 
1

Там нет необходимости возвращать значение, так как указатель списка обновляется, или функция может возвращать годен/негоден индикатор (потерпеть неудачу, если п не в списке).

void remove_node(jL* node, int n) 
{ 
jL *ppNode = node; 
jL pNode; 
    if(node == NULL || *node == NULL) 
     return; 
    while(n--){ 
     ppNode = &((*ppNode)->next); 
     if(*ppNode == NULL)    /* if n not in list */ 
      return;      /* just return */ 
    } 
    pNode = *ppNode;     /* delete node */ 
    *ppNode = (*ppNode)->next; 
    free(pNode); 
} 
0

Ну, просто взгляните на фрагмент кода здесь. Это поможет. Я предполагаю, что вы пытаетесь удалить последний узел в списке. JL - ваше название структуры, я думаю.

 void delete() 
    { 
      JL *node, *temp; //node will be deleted. 
      node=start; // start keeps track of your first node.Here we are assigning the address of first node to "node" since we will traverse from there. 
     //this will loop continuously until "node" gets the value of last node and "temp" gets the value of second last node. 
     while(node->next!=NULL) 
     { 
      temp=node; 
      node=node->next; 
     } 
     temp->next=NULL; //second last node became the last node. 
     free(next); 
} 
Смежные вопросы