Sort List

来源:互联网 发布:免费mv制作软件 编辑:程序博客网 时间:2024/05/19 23:54

1.题目

在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。

给出 1->3->2->null,给它排序变成 1->2->3->null.

2.算法

这道题我们可以用归并排序,归并排序需要找到链表中点,我们用两个指针,开始的时候分别指向开头,然后一个指针一次跳一个位置,另一个跳两个位置,当走的快的到尾后,走的慢的也到了中间。然后我们在进行排序

public ListNode sortList(ListNode head) {      return mergeSort(head);  }  public ListNode mergeSort(ListNode head){if (head == null || head.next == null){return head;}//找中点ListNode walker = head;ListNode runner = head;while(runner.next != null && runner.next.next != null){walker = walker.next;runner = runner.next.next;}ListNode head2 = walker.next;walker.next = null;ListNode head1 = head;//归并return merge(mergeSort(head1), mergeSort(head2));}public ListNode merge(ListNode head1, ListNode head2){ListNode helper = new ListNode(0);helper.next = head1;ListNode pre = helper;while (head1 != null && head2 != null){if (head1.val < head2.val){head1 = head1.next;}else{ListNode next = head2.next;head2.next = pre.next;pre.next = head2;head2 = next;}pre = pre.next;}if (head2 != null){pre.next = head2;}return helper.next;}


0 0
原创粉丝点击