给定一个奇数位升序,偶数位降序的链表,将其重新排序。
647
2022.07.16
2022.07.16
发布于 未知归属地
//    ==>排序奇升偶降链表
//    给定一个奇数位升序,偶数位降序的链表,将其重新排序。
//    输入: 1->8->3->6->5->4->7->2->NULL
//    输出: 1->2->3->4->5->6->7->8->NULL
public static ListNode sortList(ListNode head){
    // 首先拆分奇偶链表
    ListNode dumyOdd = new ListNode(-1);
    ListNode odd = dumyOdd;
    ListNode dumyEven = new ListNode(-1);
    ListNode even = dumyEven;
    ListNode now = head;
    while(now != null){
        if((now.val % 2) != 0){
            odd.next = now;
            odd = odd.next;
        }else{
            even.next = now;
            even = even.next;
        }
        now = now.next;
    }
    odd.next = null;// 将尾节点置为null
    even.next = null;// 将尾节点置为null
    // 接着翻转偶数链表
    even = reverseList(dumyEven.next);
    odd = dumyOdd.next;
    // 最后合并奇偶链表
    return mergeList(odd, even);
}

private static ListNode reverseList(ListNode head){
    ListNode pre = null, now = head;
    while(now != null){
        ListNode temp = now.next;
        now.next = pre;
        pre = now;
        now = temp;
    }
    return pre;
}

private static  ListNode mergeList(ListNode odd, ListNode even){
    ListNode dumyList = new ListNode(-1);
    ListNode now = dumyList;
    while(odd != null || even != null){
        if(odd == null){
            now.next = even;
            even = even.next;
        }else if(even == null){
            now.next = odd;
            odd = odd.next;
        }else{
            if(even.val <= odd.val){
                now.next = even;
                even = even.next;
            }else{
                now.next = odd;
                odd = odd.next;
            }
        }
        now = now.next;
    }
    return dumyList.next;
} 
评论 (0)