剣はオファーシリーズを指します剣はオファー06を指します:リンクリストを最後から最初まで印刷します

タイトル説明:

リンクリストのヘッドノードを入力し、各ノードの値を最後から最初まで返します(配列で返します)。

例:

入力: head = [1,3,2]
出力: [2,3,1]

私の考え:

再帰メソッドを使用して、リンクリストが空になるまで再帰し、再帰ノード値を毎回配列に格納してから戻ります。

コード:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> res;
    vector<int> reversePrint(ListNode* head) {
    if(head == nullptr)
        return res;
    reversePrint(head->next);
    res.push_back(head->val);
    return res;
    }
};

私が見た別の方法:

配列を直接使用し、最初にリンクリスト内の各データをトラバーサルを介して配列に格納し、次に関数を直接使用して配列を反転します。これは非常に高速です。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> res;
    vector<int> reversePrint(ListNode* head) {
    while(head)
    {
        res.push_back(head->val);
        head = head ->next;
    }
    reverse(res.begin(),res.end());
    return res;
    }
};

 

おすすめ

転載: blog.csdn.net/qq_46423166/article/details/110791837