题目
java迭代:
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head==null||head.next==null) return head;
ListNode dummy=new ListNode(-1);
dummy.next=head;
ListNode pppre=dummy;//ppre的前一个节点
ListNode ppre=dummy;//第一个大于要插入节点数值的节点
ListNode pre=head;//cur的前一个节点
ListNode cur=head.next;//要插入的节点
ListNode nxt=cur;//要插入节点的下一个
while(cur!=null){//结束条件
nxt=cur.next;
pppre=dummy;//每次从前往后找
ppre=dummy.next;
while(ppre.val<cur.val&&ppre!=cur){//找第一个大于 要插入节点值 的节点
pppre=ppre;
ppre=ppre.next;
}
if(ppre==cur){//超出要找的范围,说明节点不需插入
pre=cur;
cur=nxt;
}
else{//插入节点,并向后移动
pppre.next=cur;
cur.next=ppre;
pre.next=nxt;
cur=nxt;
}
}
return dummy.next;
}
}
时间:O(N^2),空间:O(1)