2013-06-30 118 views
-1
struct node { 
    struct node *next; 
    int data; 
} *head; 

将元素插入到链接列表后,我使用此删除功能删除链接列表的元素,但程序卡住了。我不知道我在哪里犯错。请帮帮我。元素没有在链接列表中删除

void delete(int num1) { 
    struct node *del ,*prev_node; 
    del = head; 

    if(del == NULL) { 
    printf("\n The list is empty,cant delete element"); 
    } else { 
    while(del != NULL) { 
     if(del->data == num1) { 
     if(del == head) { 
      head = del->next; 
      free(del);     
     } else { 
      prev_node->next = del->next;      
      free(del);      
     } 
     } else { 
     prev_node = del; 
     del = del->next; 
     } 
    } 
    } 
} 
+0

你能告诉我们是什么问题。我无法找到一个实施。我还想补充一点,那就是在释放他们之后让自己的指点成为好习惯。 –

+1

不能直接看到它。请发布完整的程序,以便我们编译并运行它。 –

+0

每个节点都没有重复值? – BLUEPIXY

回答

1

释放它之后从未将del设置为NULL,因此它永远不会离开循环。

free(del); 
del = NULL; 
+0

事实并非如此,因为他在下一个循环中检查下一个节点,而不是删除的节点。 –

+0

@scaryrawr,这是兄弟。我工作得很好.. – sujai

0

你不删除节点后更新的del值它所指向,从而在while循环的下一次迭代中不确定的行为。

0

版本与指针到指针:

void delete2(int num1) { 
    struct node **pp; 

    if(!head) { 
    printf("\n The list is empty,cant delete element"); 
     return; 
    } 
    for (pp = &head; *pp;) { 
     if((*pp)->data != num1) { 
      pp = &(*pp)->next; 
     } 
     else { 
     struct node *del = *pp; 
     *pp = del->next; 
     free(del); 
     } 
     } 
    } 
    }