溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++如何實(shí)現(xiàn)LeetCode

發(fā)布時(shí)間:2021-07-09 11:05:17 來源:億速云 閱讀:167 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)C++如何實(shí)現(xiàn)LeetCode的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

[LeetCode] Reverse Linked List 倒置鏈表

Reverse a singly linked list.

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?

 之前做到 Reverse Linked List II 的時(shí)候我還納悶怎么只有二沒有一呢,原來真是忘了啊,現(xiàn)在才加上,這道題跟之前那道比起來簡單不少,題目為了增加些許難度,讓我們分別用迭代和遞歸來實(shí)現(xiàn),但難度還是不大。我們先來看迭代的解法,思路是在原鏈表之前建立一個(gè)空的newHead,因?yàn)槭坠?jié)點(diǎn)會(huì)變,然后從head開始,將之后的一個(gè)節(jié)點(diǎn)移到newHead之后,重復(fù)此操作直到head成為末節(jié)點(diǎn)為止,代碼如下:

解法一:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *newHead = NULL;
        while (head) {
            ListNode *t = head->next;
            head->next = newHead;
            newHead = head;
            head = t;
        }
        return newHead;
    }
};

下面我們來看遞歸解法,代碼量更少,遞歸解法的思路是,不斷的進(jìn)入遞歸函數(shù),直到head指向倒數(shù)第二個(gè)節(jié)點(diǎn),因?yàn)閔ead指向空或者是最后一個(gè)結(jié)點(diǎn)都直接返回了,newHead則指向?qū)ead的下一個(gè)結(jié)點(diǎn)調(diào)用遞歸函數(shù)返回的頭結(jié)點(diǎn),此時(shí)newHead指向最后一個(gè)結(jié)點(diǎn),然后head的下一個(gè)結(jié)點(diǎn)的next指向head本身,這個(gè)相當(dāng)于把head結(jié)點(diǎn)移動(dòng)到末尾的操作,因?yàn)槭腔厮莸牟僮?,所以head的下一個(gè)結(jié)點(diǎn)總是在上一輪被移動(dòng)到末尾了,但head之后的next還沒有斷開,所以可以順勢(shì)將head移動(dòng)到末尾,再把next斷開,最后返回newHead即可,代碼如下:

解法二:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (!head || !head->next) return head;
        ListNode *newHead = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return newHead;
    }
};

感謝各位的閱讀!關(guān)于“C++如何實(shí)現(xiàn)LeetCode”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI