题解 | #单链表的排序#

单链表的排序

http://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08

使用冒泡排序实现单链表的排序,要定义头尾节点,方便循环,两层循环,内部进行交换


//class ListNode {
//    int val;
//    ListNode next = null;
//}

public class Solution {
    /**
     * @param head ListNode类 the head node
     * @return ListNode类
     */
    public ListNode sortInList(ListNode head) {
        if (head == null || head.next == null)  //链表为空或者仅有单个结点
            return head;
        //定义头节点和尾结点
        ListNode cur, tail = null;
        cur = head;

        //冒泡排序实现,这里两个while相当于数组排序时的双层for循环
        while (cur.next != tail) {
            while (cur.next != tail) {
                if (cur.val > cur.next.val) {
                    int tmp = cur.val;
                    cur.val = cur.next.val;
                    cur.next.val = tmp;
                }
                cur = cur.next;
            }
            //第一层循环之后,需要重新设置遍历的头尾节点
            tail = cur;  //下一次遍历的尾结点是当前结点(仔细琢磨一下里面的道道)
            cur = head;     //遍历起始结点重置为头结点
        }

        return head;
    }
}
全部评论
在这题里面冒泡不会超时吗
点赞 回复 分享
发布于 2023-09-07 11:05 广东
超时的
点赞 回复 分享
发布于 2023-12-07 15:32 辽宁

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务