我有删除链表的第一个和最后一个元素的问题。当我试图删除第一个元素时,我的代码什么都不做(当我打印一个列表时,删除的元素仍然存在)。当我试图删除最后一个时,控制台显示核心转储。双向链表C++删除元素
这里是我的代码:
void Delete_element(point del, node *elem) {
struct node *temp = elem;
if(elem->p.x==del.x && elem->p.y == del.y) {
elem=elem->next;
return;
} else {
while(elem->next->next!=NULL) {
if(elem->next->p.x==del.x && elem->next->p.y==del.y) {
temp=elem->next;
elem->next=elem->next->next;
elem->prev=temp->prev;
return;
}
temp=temp->next;
}
}
if(elem->next->p.x==del.x && elem->next->p.y==del.y) {
elem->next=NULL;
}
}
编辑:经过修复
void Delete_element(point del, node *& elem){
struct node *temp = elem;
if(elem->p.x==del.x && elem->p.y == del.y){
temp = elem->next;
free(elem);
elem=temp;
return;
}else{
while(elem->next->next!=NULL)
{
if(elem->next->p.x==del.x && elem->next->p.y==del.y)
{
temp=elem->next;
elem->next=elem->next->next;
elem->next->prev=elem;
return;
}
elem=elem->next;
}}
if(elem->next->p.x==del.x && elem->next->p.y==del.y){
elem->next=NULL;
return;
}
}
现在除去中间元素被打破。
请帮忙
哇,没有太多的空测试正在进行。你有没有尝试在调试器中逐句通过你的代码? – paddy
是的,我修正了最后一个元素的问题,但我仍然无法删除第一个元素。 – Movart