劍指offer--16.反轉鏈表

題目描述

輸入一個鏈表,反轉鏈表後,輸出鏈表的所有元素。

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

非遞歸的方式:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        //pHead本身爲空,直接返回NULL
        if(pHead==NULL)
            {
            return NULL;
        }
        //pHead鏈表只有一個節點,直接返回pHead
        if(pHead->next==NULL)
            {
            return pHead;
        }

        //需要注意指針的變化,不能使鏈表斷開
        ListNode *p=pHead;
        ListNode *pPrev=NULL;
        ListNode *pNext=NULL;

        while(p!=NULL)
            {
            pNext=p->next;
            p->next=pPrev;
            if(pNext==NULL)
                return p;
            pPrev=p;
            p=pNext;

        }

        return p;
    }
};

遞歸實現:

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        //pHead本身爲空,直接返回NULL
        //pHead鏈表只有一個節點,直接返回pHead
        if(pHead==NULL||pHead->next==NULL)
            {
            return pHead;
        }
        else
        {
            //遞歸實現
            ListNode *res=ReverseList(pHead->next);
            pHead->next->next=pHead;
            pHead->next=NULL;
            return res;
        }
}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章