Sort a linked list using insertion sort.
把插入排序应用在linkedlist上面,做一点小小的变动,之前查找到需要改变位置的元素的时候从后往前一步一步挪,因为是singlelinkedlist,则需要从head开始比较,直到找到需要插入的位置。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode insertionSortList(ListNode head) { ListNode p = head==null?null:head.next; // 考虑为空的情况 ListNode previous = head; // p指向当前遍历到的节点,previous指向之前一个节点 while(p!=null){ if(p.val<previous.val){ // 递增顺序,不变 if(head.val>p.val){ // 先考虑head的情况 previous.next = p.next; p.next = head; head = p; p=previous.next; }else{ ListNode t = head; // t是用来查找之前插入位置的 while(t.next.val<p.val){ // 用next比较,是因为要找到要插入的位置的前一个节点 t=t.next; } previous.next = p.next; p.next = t.next; t.next = p; p=previous.next; } }else{ previous = previous.next; p=p.next; } } return head; } }