题解 | #重排链表#

重排链表

https://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
  public:
    ListNode* reverse(ListNode* head) {
        if (!head || !head->next) {
            return head;
        }
        auto newHead = reverse(head->next);
        head->next->next = head;
        head->next = nullptr;
        return newHead;
    }
    ListNode* merge(ListNode* h1, ListNode* h2) {
        ListNode* r = h1;
        int cnt = 1;
        while ((h1 != h2) && h1 && h2) {
            if (cnt & 1) {
                ListNode* next = h1->next;
                h1->next = h2;
                h1 = next;
            } else {
                ListNode* next = h2->next;
                h2->next = h1;
                h2 = next;
            }
            cnt++;
        }
        return r;
    }
    void reorderList(ListNode* head) {
        ListNode* fast = head;
        ListNode* low = head;
        while (fast != nullptr && fast->next != nullptr) {
            fast = fast->next->next;
            low = low->next;
        }
        ListNode* mid = low;
        mid = reverse(mid);
        merge(head, mid);


    }
};

我考虑的有点复杂了感觉

全部评论

相关推荐

昨天 13:42
门头沟学院 Java
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
程序员小白条:主要没亮点,项目也是网上的,平平无奇,那只能海投了,奖项总得有一些,然后就是现在最好是前后端都会,自己能做项目并且运维的,要么找星球项目改改,要么找个开源项目改改,自己能拓展功能才是主要的,跟做效率很低很低
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务