菜鸟刷题之路——Q30:对链表进行插入排序

对链表进行插入排序

问题:对链表进行插入排序。
在这里插入图片描述

分析

既然问题这样描述,就要考察我们对链表的熟悉程度。其过程必须按照插入排序的方式,否则没有啥意义。
思路:按照插入排序的思路,利用指针找到当前元素该插入的位置 利用head和rear两个指针维护已经排好序的链表。
在这里插入图片描述

Code

java代码,有详细注释。

class Solution {
    /*
		执行结果:
		通过
		显示详情
		执行用时:23 ms, 在所有 Java 提交中击败了34.47% 的用户
		内存消耗:37.7 MB, 在所有 Java 提交中击败了99.13% 的用户

        思路:按照插入排序的思路,利用指针找到当前元素该插入的位置
        利用head和rear两个指针维护已经排好序的链表
    */
    public ListNode insertionSortList(ListNode head) {
        // flag用来记录已经排好的节点的个数
        int flag = 1;
        ListNode rear = head;
        if (head == null) return head;
        while (rear.next != null) {
            ListNode insertNode = rear.next;
            // 将node后移
            rear.next = insertNode.next;
            // 寻找第一个大于插入节点值的节点, count负责记录节点数
            int count = 0;
            // 一般情况
            ListNode cur = head, pre = cur;
            // 寻找节点
            while (count < flag && insertNode.val > cur.val) {
                pre = cur;
                cur = cur.next;
                count++;
            }
            // 如果新插入的节点是在头部,则更新头结点
            if (count == 0) {
                insertNode.next = head;
                head = insertNode;
                // 插在尾部和插在中间的插入操作是一样的
            } else {
                pre.next =insertNode;
                insertNode.next = cur;
            }
            // 如果是插入在尾部,则更新尾结点
            if (count == flag) rear = insertNode;
            flag++;
        }    
        return head;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值