67 对链表进行插入排序
题目:
解题思路:
图片非常详细的讲解了算法思路
https://leetcode-cn.com/problems/insertion-sort-list/solution/jian-dan-yi-dong-by-pianpianboy/
代码:
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head == null) return null;
ListNode dummyNode = new ListNode(0);
ListNode pre = dummyNode;
ListNode cur = head;
while(cur!=null){
ListNode tmp = cur.next;//提前将cur的下一个节点保存起来,因为后面需要将cur节点进行删除→插入
while(pre.next!= null&&pre.next.val<cur.val){
pre=pre.next;
}
//因为cur.val的大小介于pre.val和pre.next.val之间
//将cur插入到pre和pre.next之间,注意①和②之间的顺序
//注意此处是不会形成死循环的:由于dummy是新开辟的链表,此处是将cur节点移到了dummyNode所在的新链表中
cur.next = pre.next;//①
pre.next = cur;//②
pre = dummyNode;
cur = tmp;
}
return dummyNode.next;
}
}