题目:
Sort a linked list using insertion sort.
题意及分析:要求使用插入排序将一个链表排序,这里直接使用一个新链表存储,每次遍历到一个要添加的点时就遍历新链表找到需要插入的位置,将点插入即可。具体看代码:
代码:
/** * 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 ){ return head; } ListNode helper = new ListNode(0); //n新链表 ListNode cur = head; //将要被插入的点 ListNode pre = helper; //需要插入点位置 ListNode next = null; //将要插入点后面的一个点 //not the end of input list while( cur != null ){ next = cur.next; //遍历当前以及排序好的新链表,找到需要插入的点 while( pre.next != null && pre.next.val < cur.val ){ pre = pre.next; } //在当前点插入该点 cur.next = pre.next; pre.next = cur; pre = helper; cur = next; } return helper.next; } }