Reverse Nodes in k-Group[leetcode]遞迴和非遞迴的解法

來源:互聯網
上載者:User

標籤:leetcode

題目不難,但是容易出錯,需要考慮各種邊界情況

非遞迴代碼如下:

ListNode *reverseKGroup(ListNode *head, int k) {        if (head == NULL || k <= 1) return head;        ListNode * start = NULL, * end = NULL, *newHead = NULL, *preEnd = NULL;        while (true)        {            preEnd = end;            if (!check(head, k))            {                if (preEnd) preEnd->next = head;                if (!newHead) newHead = head;                return newHead;            }            reverse(head, k, &start, &end, &head);            if (!newHead) newHead = start;            if (preEnd) preEnd->next = start;        }        end->next = NULL;        return newHead;    }        bool check(ListNode* head, int k)    {        for (int i = 1; i <= k; i++, head = head->next)        {            if (head == NULL)            {                return false;            }        }        return true;    }        void reverse(ListNode *head, int k, ListNode** newHead, ListNode ** newTail, ListNode ** nextHead)    {        ListNode * pre, * next = head->next, * cur = head;        * newTail = cur;        for (int i = 2; i <= k; i++)        {            pre = cur;            cur = next;            next = cur->next;            cur->next = pre;        }        * newHead = cur;        * nextHead = next;    }

如果用遞迴寫會簡單些:

ListNode *reverseKGroup(ListNode *head, int k) {        if (k <= 1 || !check(head, k)) return head;        ListNode* start, *end;        reverse(head, k, &start, &end, &head);        end->next = reverseKGroup(head, k);        return start;    }        bool check(ListNode* head, int k)    {        for (int i = 1; i <= k; i++, head = head->next)            if (head == NULL)                return false;        return true;    }        void reverse(ListNode *head, int k, ListNode** newHead, ListNode ** newTail, ListNode ** nextHead)    {        ListNode * pre, * next = head->next, * cur = head;        * newTail = cur;        for (int i = 2; i <= k; i++)        {            pre = cur;            cur = next;            next = cur->next;            cur->next = pre;        }        * newHead = cur;        * nextHead = next;    }



Reverse Nodes in k-Group[leetcode]遞迴和非遞迴的解法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.