1. 程式人生 > >演算法設計與分析01-連結串列的逆置

演算法設計與分析01-連結串列的逆置

一.最常用的方法:

LNode*  ReverseList(LNode* head)
{
    if (head == NULL)
        return NULL;
    if (head->next == NULL)
        return head;
    LNode* pre = NULL;
    LNode* Cur = head;
    LNode* Nex = NULL;
    while (Cur!=NULL)
    {
        Nex = Cur->next;
        Cur->next = pre;
        pre = Cur;
        Cur = Nex;
    }
    return pre;
}
二.利用遞迴方法:

LNode* ReverList1(LNode* head)
{
    if (head == NULL)
        return NULL;
    if (head->next == NULL)
    {
        return head;
    }
    LNode* Node = head; //保留上一個結點
    LNode* Nex = head->next;
    LNode* HeadNode = ReverList1(Nex);
    Nex->next = Node; //逆置
    Node->next = NULL; //這句必須有,否則會產生迴圈連結串列
    return HeadNode;//返回逆置連結串列的尾結點
    
}