注意一下几项
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; } }
相关推荐
#Leetcode-In-Java 代码并不全是本人写的,有的参考了网络上其他前辈的想法,但都能在OJ上AC。 ###索引 1 . Two-Sum 要点: - 利用java中Array对象的sort方法排序,使得整个数组呈升序状态 - 再利用两段取点...
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中,我们可以创建一个`ListNode`类表示链表节点,然后编写一个`sortList(ListNode head)`方法来实现归并排序。`ListNode`类应包含数据域和指向下一个节点的指针。`sortList`方法首先检查链表是否为空或只有一...
sort--排序 stackqueue--栈和队列 string--串 tree--树 leetcode_agorithm leetcode算法示例题解 数据机构 线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,...
sort--排序 stackqueue--栈和队列 string--串 tree--树 leetcode_agorithm leetcode算法示例题解 数据机构 线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,...
1.1常数级链表排序Sort a linked list in O(n log n) time using constant space complexity.
在C++中,解决LeetCode问题时,开发者可能会使用STL中的容器(如vector、list、set、map等)来存储和操作数据,用算法(如sort、find、lower_bound等)来处理复杂逻辑。此外,C++的函数模板和类模板也常用于编写通用...
1. **排序算法**:在LeetCode中,常见的排序算法有快速排序、归并排序、插入排序、冒泡排序、堆排序等。Go语言中的sort包提供了基本的排序接口,可以帮助你轻松实现这些算法。 2. **搜索算法**:包括二分查找、深度...
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-...
8. **Insertion sort list** (插入排序列表): 插入排序是基础排序算法之一,这里要求在链表上实现。在Java中,需要遍历链表并逐个插入新元素,保持已排序部分的有序性。 9. **Binary Tree Postorder Traversal** ...
例如,用vector存储数组,用map进行查找操作,用algorithm中的sort进行排序。 4. **指针与引用**:C++的指针和引用能直接操作内存,这对于处理复杂数据结构和优化性能至关重要。 5. **模板和泛型编程**:模板允许...
leetcode题库 LeetCode-PHP 坚持每天做算法题 (๑╹ヮ╹๑)ノ Studying makes me happy 文件夹 Array 数组 Backtracking 回溯算法 Binary Search 二分查找 Bit Manipulation 位运算 Breadth First Search 广度优先...
本题目聚焦于Python语言,具体是LeetCode的第148题——“排序链表”。这个题目的目标是给定一个链表,将其元素按照非递减顺序进行排序。 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下...
Python的内置函数`sorted()`和`list.sort()`可以方便地对数据进行排序,但理解其内部机制对于优化和自定义排序算法至关重要。 2. **搜索算法**:二分查找、深度优先搜索(DFS)和广度优先搜索(BFS)等是解题的关键...
牛客的代码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 以 参考 和 Hash相关 1_两数之和 387_字符串中的第一个唯一字符 链表操作 2 ...删除链表的倒数第N个节点 ...sort-list 234 回文链表 palindrome-linked-list 双指针遍历/滑动
例如,在解决搜索和排序问题时,Python内置的`list`数据结构和相关的操作函数如`sort()`、`append()`等,能快速实现各种功能。 接着,我们来看数据结构。在LeetCode中,常见的数据结构包括数组、链表、栈、队列、树...
C++中的`std::list`和`std::forward_list`是链表实现。 - 栈与队列:C++标准库提供了`std::stack`和`std::queue`,它们分别实现了后进先出(LIFO)和先进先出(FIFO)的概念。 - 树结构:二叉树、AVL树、红黑树等...
6. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序等,Python内置的`sorted()`函数和`list.sort()`方法也是常用的排序手段。 7. **搜索算法**:如线性搜索、二分搜索、深度优先搜索(DFS)、...