單鏈表反轉

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        /*
        //使用先入後出棧實現
          if(pHead == NULL || pHead -> next == NULL)
            return pHead;
        ListNode* p = pHead;
        stack<ListNode* > s;
        while(p -> next)
            {
            s.push(p);
            p = p -> next;
        }
        ListNode* head = p;
        while(!s.empty())
            {
            p -> next = s.top();
            p = p -> next;
            s.pop();
        }
        p -> next = NULL;
        return head;
        */
        //使用三個指針實現
        if(pHead == NULL || pHead -> next == NULL)
            return pHead;
        ListNode* pPre = NULL;
        ListNode* pNode = pHead;
        ListNode* pNext = pHead -> next;
        while(pNext != NULL)
        {
            pNode -> next = pPre;
            pPre = pNode;
            pNode = pNext;
            pNext = pNode -> next;
        }
        pNode -> next = pPre;
        return pNode;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章