iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
Software Development

30天刷完leetcoode75系列 第 13 篇

C++ 演算法練習 Day13|2095, 328, 206 題解與思路分享

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260927/20184265wAlVOf9Jvf.png

題目解析:把鏈結串列正中間的節點刪除,並回傳修改後的串列
解題思路:設一快一慢兩個指標,慢指標走一步,快指標先從第三個節點起步走兩步。丟進迴圈跑,快指標走到底時,慢指標會剛好停在中間節點的前一位。把中間節點跳過並刪除,回傳頭節點

class Solution{
public:
    ListNode* deleteMiddle(ListNode* head){
        if(head->next == nullptr) return nullptr;

        ListNode* n = head;
        ListNode* m = head->next->next;

        while(m != nullptr && m->next != nullptr){
            n = n->next;
            m = m->next->next;
        }

        ListNode* mid = n->next;
        n->next = mid->next;

        delete mid;
        return head;
    }
};

https://ithelp.ithome.com.tw/upload/images/20260927/20184265rY9Ehoibx2.png

題目解析: 把鏈結串列依位子的奇偶數分組,讓奇數位節點排前面,偶數位節點排後面,回傳重新排列的串列
解題思路: 把第一個節點當奇數指標,第二個當偶數指標,並記住偶數串列的頭。丟進迴圈跑,把奇數指標連向偶數的下一個並往前走;偶數指標也連向奇數的下一個並往前走。最後把奇數串列尾巴接上偶數串列的頭,回傳頭節點

class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        if(head == nullptr || head->next == nullptr) return head;

        ListNode* odd = head;
        ListNode* even = head->next;
        ListNode* evenHead = even;

        while(even != nullptr && even->next != nullptr){
            odd->next = even->next;
            odd = odd->next;
            even->next = odd->next;
            even = even->next;
        }

        odd->next = evenHead;
        return head;
    }
};

https://ithelp.ithome.com.tw/upload/images/20260927/20184265EsXG98aZmU.png

題目解析: 將給定的單向鏈結串列整個反轉過來,回傳反轉後的新頭節點
解題思路: 設指標n為空值當前節點,指標m指向現在的頭節點。丟進迴圈跑,先把m的下一個暫存起來,把m的箭頭反轉指向n。接著把n跟m都往後移一個位子。迴圈跑完後回傳n

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* n = nullptr;
        ListNode* m = head;

        while(m != nullptr){
            ListNode* p = m->next;
            m->next = n;
            n = m;
            m = p;
        }

        return n;
    }
};

上一篇
C++ 演算法練習 Day12|547, 841 題解與思路分享
下一篇
C++ 演算法練習 Day14|827, 104, 2130題解與思路分享
系列文
30天刷完leetcoode75 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言