package Leetcode_LinkedList; /** * 题目: * Sort a linked list using insertion sort. * 解题思路: * 要求在链表上实现一种排序算法,这道题是指定实现插入排序。插入排序是一种O(n^2)复杂度的算法, * 基本想法就是每次循环找到一个元素在当前排好的结果中相对应的位置,然后插进去,经过n次迭代之后就得到排好序的结果了。 * 时间复杂度是排序算法的O(n^2),空间复杂度是O(1)。 */ public class InsertionSortList_147_1014 { public ListNode InsertionSortList(ListNode head) { if (head == null) { return head; } ListNode result = new ListNode(-1); ListNode preNode = result; ListNode curNode = head; while (curNode != null) { ListNode temp = curNode.next;//将当前结点的下一个结点保存起来 preNode = result; while (preNode.next != null && preNode.next.val <= curNode.val) { preNode = preNode.next; } curNode.next = preNode.next; preNode.next = curNode; curNode = temp; } return result.next; } public static void main(String[] args) { ListNode node1 = new ListNode(6); ListNode node2 = new ListNode(5); ListNode node3 = new ListNode(3); ListNode node4 = new ListNode(1); ListNode node5 = new ListNode(8); ListNode node6 = new ListNode(7); ListNode node7 = new ListNode(2); ListNode node8 = new ListNode(4); node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5; node5.next = node6; node6.next = node7; node7.next = node8; InsertionSortList_147_1014 test = new InsertionSortList_147_1014(); ListNode result = test.InsertionSortList(node1); while (result != null) { System.out.print(result.val+" "); result = result.next; } } }
leetcode:(147) Insertion Sort List(java)
最新推荐文章于 2024-06-13 06:15:53 发布