删除C中有序链表中的最后一个元素

时间:2015-12-30 23:29:36

标签: c list

我有一个链表,它根据其中一个值按升序组织数据(每个节点都保存了多个变量)。我根据条件从链表中删除节点。事情是,它工作,并在条件满足时删除每个节点但是当它到达最后一个元素时,它总是崩溃,当它删除它,我不知道为什么。我到处寻找它并尝试了不同的方法但没有帮助

  

我希望有人能通过查看我的代码告诉我导致崩溃的原因。

这是我的删除功能:

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等于其中一个节点中的相同值之一时,我基本上删除了其中一个节点。我的功能已经做到了,但当它删除崩溃中的最后一个元素时。

0 个答案:

没有答案