【发布时间】:2013-08-29 09:20:06
【问题描述】:
我的代码适用于链表开头的元素,但不适用于中间或末尾的元素。感谢您的帮助!
void remove(){
if (!head)
printf("\nNo nodes to delete. List is empty.");
else{
int n;
struct node* help = head;
printf("Enter an element to delete: ");
scanf("%d", &n);
if(head->data == n){
help-> next->prev = 0;
head = help -> next;
} else{
while(help -> next){
if(help -> data == n){
help -> next -> prev = help -> prev;
help -> prev -> next = help -> next;
}
else help = help -> next;
}
}
}
}
【问题讨论】:
-
为什么不把
n作为remove()的参数? -
@meaning-matters 为什么人们总是挑代码而不是回答提出的问题?您的问题与所提出的问题无关,并且发布的代码很可能会被简化以发布到 SO - 而不是提问者为实际项目实际编写的方式。
-
@shail 为我们提供有关它如何失败的具体示例会很有帮助,因为您的代码有很多问题,而且如果不为您重写代码就很难将它们全部指出(这不应该是在SO上完成)
-
@xaxxon 总的来说,我的程序是用于在排序的双向链表中插入和删除节点。插入工作并从链表中删除第一个节点工作正常,除了删除最后一个节点。此外,删除中间和末尾的节点不起作用。如果我尝试删除最后一个节点,我会被引导回 main();如果我尝试删除中间的节点,程序会崩溃:|
标签: c pointers logic structure doubly-linked-list