leetcode——链表排序(插入排序)

插入排序:讲一个元素看做有序序列,其他元素看做无序序列,从无序序列中取出一个元素插入到有序序列中

  • 时间复杂度 = O(n^2)
  • 空间复杂度 = O(n)

题目
使用插入排序对链表进行排序。

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution{
    
    
	public ListNode insertionSortList(ListNode head){
    
    
		if(head==null || head.next==null) return head;
		
		//头结点
		ListNode newHead = new ListNode(0);
		newHead.next = head;
		ListNode p = head;
		ListNode q;
		ListNode temp;
		
		while(p != null && p.next != null){
    
    
			if(p.val <= p.next.val){
    
    
			p = p.next;
			}else{
    
    
			//将链表中带插入的结点q删除
			q = p.next;
			p.next = q.next;
			
			temp = newHead;
			//找到第一个>=q.val的结点,将q.val插入到该结点的前面
			while(temp.next.val <= q.val)   temp = temp.next;
			q.next = temp.next;
			temp.next = q;
			}
		}
		return newHead.next;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42937036/article/details/105348241