2015-11-15 3 views
0

Я пытаюсь удалить узел из списка. Я должен использовать функцию, которую я использовал для удаления первого узла из списка, а затем я должен добавить другие узлы (перед узлом, который я хотел удалить). Функции удаляют узел в начале списка и добавляются к началу списка.Как удалить узел

Я попробовал этот код:

List* Delete_theNode(int the_node){ 

    List *temp; 

    if(head->next == NULL) 
    { 
     printf("empty list.."); 
    } 

    else 
    { 
     for(temp = head; temp!= NULL; temp = temp-> next) 
     { 
      Delete_node(); 
     } 
     if(temp->number == the_node) 
     { 
      Delete_Node(); 
     } 

     else 
     { 
      printf("\n%d there is no such a node\n", the_node); 
     } 

    } 
} 
+6

Если вы удаляете произвольный узел из стека, то у вас нет стека. –

+1

, так как вы получили ответы на свой код, я отменил удаление кода. – bolov

+1

любая причина, по которой вы изменили название на норвежский? – bolov

ответ

1

У вас есть много ошибок в коде!

Эта структура больше похожа на Связанный список, а не Стек.

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

Кроме того, вам необходимо освободить память на удаленном узле перед ее удалением.

В идеале:

Stack* Delete_theNode(int the_node) { 
    //check if it is on the head 
    if (the_node==head->number) { 
     Stack * temp = head; 
     head = head->next; 
     free(temp); 
     return; 

    } 

    Stack* cur = head->next; 
    Stack* prev = head; 
    //while cur is not NULL and prev is not NULL, this is also legit 
    while (!cur && !prev) { 
     if (the_node == cur->number) { 
      Stack *tmp = cur;//the deleted node 
      prev->next = cur->next; 
      free(tmp); 
      return; 
     } 
     prev = cur; 
     cur = cur->next; 
    } 
} 
0

Использование рекурсии для добавления снова удаленные узлы. Я попытался исправить, но не скомпилировал, поэтому может возникнуть некоторая синтаксическая ошибка. Пожалуйста, проверьте

Stack* Delete_theNode(int the_node){ 
    if(head == NULL) 
    { 
     printf("empty stack.."); 
    } 

    else 
    { 

     if((head != NULL) && (head->number != the_node)) 
     { 
      Stack *deletedNode = Delete_Node();//Delete top node & reset the head 
      Delete_theNode(the_node); //Recursive Call 
      Add_toStack(deletedNode); //Add node and reset the head 
     } 

     else if(head->number == the_node) 
     { 
      Delete_Node(); 
     } 

     else 
     { 
      printf("\n%d there is no such a node\n", the_node); 
     } 

    } 
} 
0

Я сделал это, используя -структуру. Надеюсь, это поможет вам.

#include<iostream> 

using namespace std; 

struct node 
{ 
    int number; 
    node *next; 
}; 

node a, b, c, d, e, *head, *current, *old, myNewNode;//global 
bool flag, token;//global 
int deletionInt, searchInt, newInt;//global 


void Deletion() 
    { 
     cout << "Enter the integer to be deleted: " ; 

    cin >> deletionInt; 
old = head; 

current = head; 

while(1) 
{ 
    if(head==NULL) 
    { 
     cout << "Your list is empty, nothing to delete here!" << endl; 

     break; 
    } 

    if(deletionInt==current->number) 
    { 
     if(current == head) 
     { 
      head= current->next; 

      current = head; 
     } 
     else 
     { 
      old->next= current->next; 

      current = old; 
     } 
     break; 
    } 
    if(current->next==NULL) break; 

    else 
    { 
     old = current; 

     current = current->next; 
    } 
} 
} 
Смежные вопросы