关注我们获取更多计算机考研信息
对链表进行插入,
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
……⏰ 思考时间……
如果你想好答案了
请查看代码实现
▼
代码实现
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head == null)return head; //判空
ListNode pre = head; //双指针维护前序
ListNode cur = head.next;
while(cur != null){
if(cur.val >= pre.val){ //如果当前结点比上一个节点大,就没必要移动了,
pre = pre.next; //只需要移动一位当前节点和维护的前序节点。
cur = cur.next;
continue;
}
pre.next = cur.next; // 不然的话,根据题意,把需要重定位的节点独立出来。
cur.next = null;
if(cur.val //特殊处理,如果当前节点比head节点还小,那就直接插在头节点前,更新head
cur.next = head;
head = cur;
cur = pre.next;
continue;
}
ListNode c = head.next; //如果以上既不比上一个节点大,又不比头节点小,那就是中间常规插入了。
ListNode p = head;
while(cur.val > c.val){ //找到合适的插入位置,p--->c p---> 插这 --->c
p = c;
c = c.next;
}
微信关注“字节408考研”,
免费获取各院校计算机软件考研信息与专业课资料!