我有一个链表,它根据其中一个值按升序组织数据(每个节点都保存了多个变量)。我根据条件从链表中删除节点。事情是,它工作,并在条件满足时删除每个节点但是当它到达最后一个元素时,它总是崩溃,当它删除它,我不知道为什么。我到处寻找它并尝试了不同的方法但没有帮助
我希望有人能通过查看我的代码告诉我导致崩溃的原因。
这是我的删除功能:
void RemoveFromWaiting(wPtr *waitingPtr,int MinsToLand)
{
wPtr previousPtr;
wPtr currentPtr;
wPtr tempPtr;
if(MinsToLand == (*waitingPtr)->MinsToLand)
{
tempPtr=*waitingPtr;
*waitingPtr=(*waitingPtr)->nextPtr;
free(tempPtr);
}
else
{
previousPtr=*waitingPtr;
currentPtr=(*waitingPtr)->nextPtr;
while(currentPtr!=NULL && currentPtr->MinsToLand != MinsToLand)
{
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
if(currentPtr!=NULL)
{
tempPtr=currentPtr;
previousPtr->nextPtr=currentPtr->nextPtr;
free(tempPtr);
}
}
}
如果在这里有任何用处,那么首先将值添加到列表中的结构和函数:
struct WaitingList{
char fdetails[10];
int ArrivalTimeHours;
int ArrivalTimeMins;
int MinsToLand;
int MinsForFuel;
int passengers;
struct WaitingList *nextPtr;
};
typedef struct WaitingList Waiting;
typedef Waiting *wPtr;
void AddToWaitList(wPtr *waitingPtr, char fdetails[], int ArrivalTimeHours,
int ArrivalTimeMins, int MinsToLand, int MinsForFuel, int passengers)
{
wPtr newPtr;
wPtr previousPtr;
wPtr currentPtr;
newPtr=malloc(sizeof(Waiting));
if( newPtr!=NULL)
{
strncpy(newPtr->fdetails,fdetails,sizeof(Waiting));
newPtr->ArrivalTimeHours=ArrivalTimeHours;
newPtr->ArrivalTimeMins=ArrivalTimeMins;
newPtr->MinsForFuel=MinsForFuel;
newPtr->MinsToLand=MinsToLand;
newPtr->passengers=passengers;
newPtr->nextPtr=NULL;
previousPtr=NULL;
currentPtr=*waitingPtr;
while(currentPtr!=NULL && MinsToLand > currentPtr->MinsToLand)
{
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
if(previousPtr==NULL)
{
newPtr->nextPtr=*waitingPtr;
*waitingPtr=newPtr;
}
else
{
previousPtr->nextPtr=newPtr;
newPtr->nextPtr=currentPtr;
}
}
}
当输入到函数的变量MinsToLand
等于其中一个节点中的相同值之一时,我基本上删除了其中一个节点。我的功能已经做到了,但当它删除崩溃中的最后一个元素时。