Reverse Linked List

最開始我想到的是用先遍歷鏈表,把元素存入數組中,然後反向遍歷數組在重新生成一個鏈表。首先判斷當鏈表沒有節點,或只有一個節點的時候,反轉後還是它本身,直接返回頭節點。在leetcode提交的runtime是8ms代碼如下:

<span style="font-size:18px;"> ListNode* reverseList(ListNode* head) {
        ListNode *tmp=NULL,*res = NULL,*dummy = new ListNode(0);
        vector<int> v;
        tmp = head;
        res = dummy;
        if(head == NULL || head->next == NULL)
            return head;
        while(tmp != NULL)
        {
            v.push_back(tmp->val);
            tmp = tmp->next;
        }
        for(int i = v.size()-1;i>=0;i--)
        {
            ListNode* t = new ListNode(0);
            t->val = v[i];
            dummy->next = t;
            dummy = dummy->next;
        }
        return res->next;
    }</span>
然後看到DIscuss裏面還有一種是原址的,只需要O(1)個額外空間,比較巧妙,只需要遍歷一次即可。但是leetcode提交的是20ms,代碼如下:

ListNode* reverseList(ListNode* head) {
        ListNode *it,*pre=NULL,*temp;
        it = head;
        if(it == NULL || it->next == NULL)
            return head;
        while(it)
        {
            temp = it->next;
            it->next = pre;
            pre = it;
            it = temp;
        }
        return pre;
    }



發佈了50 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章