0
点赞
收藏
分享

微信扫一扫

链表中等 NC207 排序奇升偶降链表

Just_Esme 2022-01-09 阅读 63

NC207 排序奇升偶降链表

描述

给定一个奇数位升序,偶数位降序的链表,返回对其排序后的链表。
题面解释:例如链表 1->3->2->2->3->1 是奇数位升序偶数位降序的链表,而 1->3->2->2->3->2 则不符合题目要求。

分析

  • 首先使用“leetcode328. 奇偶链表”的解法,将链表分解为奇偶两个链表。
  • 然后使用反转偶数链变成上升
  • 合并两个上身链表。
import java.util.*;
public class Solution {
    public ListNode sortLinkedList (ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        ListNode dummy = new ListNode(0);
        ListNode evens = new ListNode(0);
        ListNode odd = head;
        ListNode even = head.next;
        dummy.next = odd;
        evens.next = even;
        while(even != null && even.next != null){
            odd.next = even.next;
            odd = odd.next;
            even.next = odd.next;
            even = even.next;
        }
        odd.next = null;
        ListNode neweven = reverse(evens.next);
        return merge(dummy.next,neweven);
    }
    
    public ListNode reverse(ListNode head){
        ListNode pre = null;
        while(head != null){
            ListNode tmp = head.next;
            head.next = pre;
            pre = head;
            head = tmp;
        }
        return pre;
    }
    
    public ListNode merge(ListNode odd, ListNode even){
        ListNode dummy = new ListNode(0);
        ListNode cur = dummy;
        while(odd != null && even != null){
            if(odd.val < even.val){
                cur.next = odd;
                odd = odd.next;
                cur = cur.next;
            }else{
                cur.next = even;
                even = even.next;
                cur = cur.next;
            }
        }
        if(odd != null){
            cur.next = odd;
        }
        if(even != null){
            cur.next = even;
        }
        return dummy.next;
    }
}
举报

相关推荐

0 条评论