题意:实现链表的插入排序
插入排序是一种O(n^2)复杂度的算法,就是每次循环找到一个元素在当前排好的结果中相对应的位置,然后插进去,经过n次迭代之后就得到排好序的结果了。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode insertionSortList(ListNode head) {
if(head==null||head.next==null) {
return head;
}
ListNode dummy = new ListNode(0);//存储排序好的链表
ListNode curNode = head;
while (curNode != null) {
ListNode nextNode = curNode.next;
ListNode tmpNode = dummy;
//从排序好的链表的第一个节点依次和当前节点比较
//如果小于当前节点,则节点后移,继续寻找当前节点应该插入的位置
while (tmpNode.next != null && tmpNode.next.val < curNode.val) {
tmpNode = tmpNode.next;
}
//确定节点插入位置之后,交换位置
curNode.next = tmpNode.next;
tmpNode.next = curNode;
curNode = nextNode;
}
return dummy.next;
}
}