`
blue2048
  • 浏览: 183794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[leetcode]Sort List-链表排序 java

阅读更多

注意一下几项

1. nlogn时间复杂度,稳定的算法是堆排序和归并排序

2. 常数地址空间,堆排序不合适,考虑归并排序的变种

3. 注意链表查找中间节点的小算法

 

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode sortList(ListNode head) {
        return mergeSort(head);        
    }
    
    private ListNode mergeSort(ListNode head) {
        if(head == null){
            return null;
        }
        if(head.next == null){
            return head;
        }
        ListNode center = head;
        ListNode tail = head;
        while (tail.next!=null){
            if(tail.next.next==null){
                break;
            }
            tail = tail.next.next;
            center = center.next;
        }
        ListNode pre = center.next;
        center.next=null;
        ListNode head1 = mergeSort(head);
        ListNode head2 = mergeSort(pre);
        return merge(head1, head2);
    }

    private ListNode merge(ListNode head1, ListNode head2){
        ListNode head = new ListNode(0);
        ListNode p = head;
        ListNode temp = null;
        while (head1!=null && head2!=null){
            if(head2.val < head1.val){
               p.next=head2;
               if(head2.next != null){
                   temp = head2.next;
                   p.next.next = null;
                   head2 = temp;
               }else {
                   head2 = null;
               }

            }else {
                p.next=head1;
                if(head1.next != null){
                    temp = head1.next;
                    p.next.next = null;
                    head1 = temp;
                }else {
                    head1 = null;
                }

            }
            p=p.next;
        }
        if(head1!=null){
            p.next = head1;
        }
        if(head2!=null){
            p.next = head2;
        }
        return  head.next;
    }
}

 

分享到:
评论

相关推荐

    leetcodeoj和leetcode-leetcode-in-java:这是leetcode学习笔记。(在Java中)

    #Leetcode-In-Java 代码并不全是本人写的,有的参考了网络上其他前辈的想法,但都能在OJ上AC。 ###索引 1 . Two-Sum 要点: - 利用java中Array对象的sort方法排序,使得整个数组呈升序状态 - 再利用两段取点...

    gasstationleetcode-leetcode-in-niuke:在牛客网上的在线编程中的leetcode在线编程题解

    insertion-sort-list 树 binary-tree-postorder-traversal 树 binary-tree-preorder-traversal 链表 linked-list-cycle-ii 链表 linked-list-cycle 链表 copy-list-with-random-pointer 复杂度 single-number 动态...

    java-leetcode题解之第148题排序链表.zip

    在Java中,我们可以创建一个`ListNode`类表示链表节点,然后编写一个`sortList(ListNode head)`方法来实现归并排序。`ListNode`类应包含数据域和指向下一个节点的指针。`sortList`方法首先检查链表是否为空或只有一...

    leetcode摇摆-my-Java-DS:我的Java-DS

    sort--排序 stackqueue--栈和队列 string--串 tree--树 leetcode_agorithm leetcode算法示例题解 数据机构 线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,...

    leetcode摇摆-data-structure:java数据结构

    sort--排序 stackqueue--栈和队列 string--串 tree--树 leetcode_agorithm leetcode算法示例题解 数据机构 线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,...

    maycope#Leetcode-Classic#1.1常数级链表排序1

    1.1常数级链表排序Sort a linked list in O(n log n) time using constant space complexity.

    leetcode-quaint-2021:leetcode古雅

    在C++中,解决LeetCode问题时,开发者可能会使用STL中的容器(如vector、list、set、map等)来存储和操作数据,用算法(如sort、find、lower_bound等)来处理复杂逻辑。此外,C++的函数模板和类模板也常用于编写通用...

    Algorithm-leetcode-go.zip

    1. **排序算法**:在LeetCode中,常见的排序算法有快速排序、归并排序、插入排序、冒泡排序、堆排序等。Go语言中的sort包提供了基本的排序接口,可以帮助你轻松实现这些算法。 2. **搜索算法**:包括二分查找、深度...

    LeetCode:LeetCode解决方案

    LeetCodeLeetCode solutions(Java)树Minimum Depth of Binary Tree栈evaluate-reverse-polish-notation穷举max-points-on-a-line链表sort-list排序insertion-sort-list树binary-tree-postorder-traversal树binary-...

    leetcode-answer-and-analysis(part).zip_图形图像处理_Java_

    8. **Insertion sort list** (插入排序列表): 插入排序是基础排序算法之一,这里要求在链表上实现。在Java中,需要遍历链表并逐个插入新元素,保持已排序部分的有序性。 9. **Binary Tree Postorder Traversal** ...

    leetcode-Question-Soluction

    例如,用vector存储数组,用map进行查找操作,用algorithm中的sort进行排序。 4. **指针与引用**:C++的指针和引用能直接操作内存,这对于处理复杂数据结构和优化性能至关重要。 5. **模板和泛型编程**:模板允许...

    leetcode题库-LeetCode-PHP:LeetCode算法题

    leetcode题库 LeetCode-PHP 坚持每天做算法题 (๑╹ヮ╹๑)ノ Studying makes me happy 文件夹 Array 数组 Backtracking 回溯算法 Binary Search 二分查找 Bit Manipulation 位运算 Breadth First Search 广度优先...

    python-leetcode面试题解之第148题排序链表-题解.zip

    本题目聚焦于Python语言,具体是LeetCode的第148题——“排序链表”。这个题目的目标是给定一个链表,将其元素按照非递减顺序进行排序。 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下...

    leetcode答案-Leetcode-Python:Leetcode算法

    Python的内置函数`sorted()`和`list.sort()`可以方便地对数据进行排序,但理解其内部机制对于优化和自定义排序算法至关重要。 2. **搜索算法**:二分查找、深度优先搜索(DFS)和广度优先搜索(BFS)等是解题的关键...

    牛客的代码leetcode代码区别-coding-study:使用leetcode、niuke等编码

    牛客的代码leetcode代码区别 coding-study coding with leetcode, niuke and so on 1、base (基础) Here are some easy examples to study DataStructure and Algorithm Algorithm (算法部分) Sort (排序) ...

    leetcode中325题python-leetcode:leetcode

    leetcode中325题python leetcode 以 参考 和 Hash相关 1_两数之和 387_字符串中的第一个唯一字符 链表操作 2 ...删除链表的倒数第N个节点 ...sort-list 234 回文链表 palindrome-linked-list 双指针遍历/滑动

    LeetCode-Python代码.rar

    例如,在解决搜索和排序问题时,Python内置的`list`数据结构和相关的操作函数如`sort()`、`append()`等,能快速实现各种功能。 接着,我们来看数据结构。在LeetCode中,常见的数据结构包括数组、链表、栈、队列、树...

    Leetcode_Basic-Notes:Leetcode模板技巧积累

    C++中的`std::list`和`std::forward_list`是链表实现。 - 栈与队列:C++标准库提供了`std::stack`和`std::queue`,它们分别实现了后进先出(LIFO)和先进先出(FIFO)的概念。 - 树结构:二叉树、AVL树、红黑树等...

    leetcode-problem-answers:Furkan Erdi和BurakAslantaş解决了一些日常leetcode问题

    6. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序等,Python内置的`sorted()`函数和`list.sort()`方法也是常用的排序手段。 7. **搜索算法**:如线性搜索、二分搜索、深度优先搜索(DFS)、...

Global site tag (gtag.js) - Google Analytics