連結串列面試題(二)---連結串列逆序(連結串列反轉)

gogogo_sky發表於2017-05-16

一、結構體定義

typedef int DataType;

typedef struct ListNode//定義結點
{
    DataType data;
    struct ListNode* next;
}ListNode,*PListNode;

typedef struct  PList//定義一個成員是指向結點的指標的結構體
{
    PListNode PHead;
}List,*PList;

二、程式碼:

//2.連結串列逆序(翻轉)
void ReverseList(PList PList)
{
    PListNode cur=NULL;
    PListNode NewNode=NULL;
    PListNode tmp=NULL;
    cur=PList->PHead;
    assert(PList);  
    if (PList->PHead==NULL||PList->PHead->next==NULL)//空連結串列或著只有一個結點的連結串列
    {
        return  PList->PHead; 
    }
    else//大於兩個結點
    {
        while (cur)
        {
            tmp=cur;
            cur=cur->next;//先將當前指標更新到下一個結點
            tmp->next=NewNode;
            NewNode=tmp;
        }
        PList->PHead=NewNode;//更新連結串列的頭
    }
}

相關文章