leetcode之Insertion Sort List

来源:互联网 发布:网络db是什么意思啊 编辑:程序博客网 时间:2024/05/20 22:03

Insertion Sort List ,即用插入的方法排序链表。

主要思想:先从原始链表list摘掉一个节点,然后判断这个节点应该插入在sortedList的表头,中间,还是表尾。循环此步骤,直到原始链表为空。

源代码如下:

import java.util.Random;public class InsertionSortLinkedList {public ListNode insertionSortList(ListNode head){if(head == null || head.next == null)return head;ListNode sortedHead = head; //用p指向有序链表的第一个节点head = head.next;sortedHead.next = null;ListNode currentNode = null;  //当前待插入的节点ListNode sortedNode = sortedHead; //游走在有序链表的指针ListNode preSortedNode = sortedNode; //sortedNode的前驱while(head != null){currentNode = head;head = head.next;currentNode.next = null;  //把当前节点从原始链表中摘出来while(sortedNode != null && currentNode != null){if(sortedHead.val >= currentNode.val) //如果插入点在链表的开始处{currentNode.next = sortedHead;sortedHead = currentNode;//currentNode = null;break;}else if(sortedNode.val < currentNode.val){preSortedNode = sortedNode;sortedNode = sortedNode.next;}else{currentNode.next = preSortedNode.next;preSortedNode.next = currentNode;break;//currentNode = null;}}if(sortedNode == null)  //插入点在链表表尾{preSortedNode.next = currentNode;}sortedNode = sortedHead;currentNode = null;}return sortedHead;}public static void main(String[] args){Random rand = new Random();ListNode head = null;ListNode currentNode = null;for(int i = 0 ; i < 10; i ++){if(head == null){head = new ListNode(rand.nextInt(47));currentNode = head;}else{currentNode.next = new ListNode(rand.nextInt(47));currentNode = currentNode.next;}}//System.out.println("ok!");InsertionSortLinkedList isll = new InsertionSortLinkedList();ListNode result = isll.insertionSortList(head);while(result != null){System.out.print(result.val + " ");result = result.next;}//System.out.println("ok!");}}//class ListNode {//    int val;//    ListNode next;//    ListNode(int x) {//        val = x;//        next = null;//   }//}


0 0