1、迭代法
- 时间复杂度:O(n²) ,其中n是链表的长度。
- 空间复杂度:O(1) ,只需要常量级的辅助变量。
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head==null||head.next==null) return head;
ListNode newhead=new ListNode();
newhead.next=head;
ListNode lastNode=head;
ListNode p=head.next;//p用来标记当前插入的点
while(p!=null){
if(lastNode.val<=p.val){
lastNode=lastNode.next;//如果当前p点大于有序链表尾,则直接修改链表尾指针lastNode
}else{
ListNode pre=newhead;//定义一个pre指针,用来选择p节点插入位置
while(pre.next.val<=p.val){//从头遍历有序链表
pre=pre.next;
}//退出while的那个条件是pre.val<=p.val&&pre.next.val>p.val
lastNode.next=p.next;
p.next=pre.next;
pre.next=p;
}
p=lastNode.next;
}
return newhead.next;
}
}