leetcode騰訊精選練習之鏈表逆置(三)

反轉單鏈表

題目:

反轉一個單鏈表。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL指針

思路:

1.定義一個結點指針pCur指向當前鏈表,再定義一個指針pPre指向前一個結點,初始化爲NULL。
2.循環遍歷該鏈表,定義一個臨時指針pNext指向當前鏈表的下一個結點,而後斷開當前結點和下一個結點的指針關係,讓當前結點的指針pCur的next指向pPre,即完成當前結點的反轉。而後前移pPre指針和pCur指針,循環順序執行該操做。
3.當臨時指針pNext爲NULL的時候說明pCur指針已經走到該鏈表的最後一個結點
code

代碼:

ListNode* reverseList(ListNode* head) {
    ListNode* pPre = NULL;
    ListNode* pCur = head;
    while (pCur != NULL)
    {
        ListNode* pNext = pCur->next;
        pCur->next = pPre;
        pPre = pCur;
        if (pNext == NULL)
        {
            return pCur;
        }
        pCur = pNext;
    }
    return pCur;
}

改進版:blog

ListNode* reverseList(ListNode* head) {
    ListNode* pPre = NULL;
    ListNode* pCur = head;
    ListNode* pNext =NULL;
    while (pCur != NULL)
    {
        pNext = pCur->next;
        pCur->next = pPre;
        pPre = pCur;
        pCur = pNext;
    }
    return pPre;
}

總結:

1.思路很簡單就是指針交換肯定好指針交換的順序就行
2.改進版本的思路仍是同樣,只是減小了判斷的次數,數據量大的時候時間節約比較明顯,小數據量差距不大。

紙上得來終覺淺,絕知此事要躬行
List

相關文章
相關標籤/搜索