题解 | #排序奇升偶降链表#

排序奇升偶降链表

http://www.nowcoder.com/practice/3a188e9c06ce4844b031713b82784a2a

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
     //类似leetcode328奇偶链表,去掉链表合并步骤
    ListNode* partition(ListNode* head) {
        ListNode* odd = head;
        ListNode* evenHead = head->next;
        ListNode* even = evenHead;
        while (even != nullptr && even->next != nullptr) {
            odd->next = even->next;
            odd = odd->next;
            even->next = odd->next;
            even = even->next;
        }
        odd->next = nullptr;
        return evenHead;
    }
    
    //leetcode206反转链表
    ListNode* reverseList(ListNode* head) {
        ListNode* prev = nullptr;
        ListNode* cur = head;
        while (cur != nullptr) {
            ListNode* tmp = cur->next;
            cur->next = prev;
            prev = cur;
            cur = tmp;
        }
        return prev;
    }
    
    //leetcode21合并两个有序链表
    ListNode* sortList(ListNode* l1, ListNode* l2) {
        if (l1 == nullptr) {
            return l2;
        } else if (l2 == nullptr) {
            return l1;
        } else if (l1->val <= l2->val) {
            l1->next = sortList(l1->next, l2);
            return l1;
        } else {
            l2->next = sortList(l1, l2->next);
            return l2;
        }
    }
    
    ListNode* sortLinkedList(ListNode* head) {
        if (head == nullptr || head->next == nullptr) {
            return head;
        }
        ListNode* evenHead = partition(head);
        evenHead = reverseList(evenHead);
        return sortList(head, evenHead);
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务