67 对链表进行插入排序

【LeetCode】 67 对链表进行插入排序

题目:

image-20200806235644439

image-20200806235634308

解题思路:

图片非常详细的讲解了算法思路

image-20200806235602910

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;

}
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 67 对链表进行插入排序