对链表进行插入排序
对链表元素插入排序
示例 1:
输入: 4->2->1->3 输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0 输出: -1->0->3->4->5
解题思路:
对于待排序的元素,在前部分有序链表中找到合适的位置插入即可。
如
对结点2插入排序,只需将其插入到节点1与节点3之间即可。
从起点开始遍历查找第一个大于节点2的节点,将节点2插入该节点的前面。
定义两个指针p,q, q指向待排序节点的前一个节点,p用于查找第一个大于待排序节点的节点
借用p,q指针可以将节点2插入节点3之前。
实现代码:
public static ListNode insertionSortList(ListNode head) { ListNode first = new ListNode(0); first.next = head; ListNode p = first; ListNode q = head; ListNode temp; while (q.next != null) { p = first; while (p!=q && p.next.val<q.next.val) p = p.next; if (p != q) { temp = q.next; q.next = temp.next; temp.next = p.next; p.next = temp; } else q = q.next; } return first.next; }
posted on 2018-07-21 20:40 Deltadeblog 阅读(152) 评论(0) 编辑 收藏 举报