题解 | #牛的品种排序IV#

牛的品种排序IV

https://www.nowcoder.com/practice/bd828af269cd493c86cc915389b02b9f

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode sortCowsIV (ListNode head) {
        // write code here
        if (head == null || head.next == null) {
            return head;
        }

        boolean swapped;
        do {
            swapped = false;
            ListNode current = head;
            while (current != null && current.next != null) {
                if (current.val > current.next.val) {
                    int temp = current.val;
                    current.val = current.next.val;
                    current.next.val = temp;
                    swapped = true;
                }
                current = current.next;
            }
        } while (swapped);

        return head;
    }
}

考察的知识点:

  1. 链表基本概念:了解链表的定义和基本操作,比如节点插入、删除等。
  2. 排序算法:了解不同的排序算法,例如冒泡排序、插入排序、快速排序等。

题目的解答方法:

在不使用库内置的 sort 函数的情况下,我们可以采用一种简单的排序方法,比如冒泡排序。冒泡排序的基本思想是,从头开始依次比较相邻的元素,如果顺序错误就交换位置,这样经过一轮遍历后,最大的元素就会“冒泡”到数组的末尾。重复执行这个过程,每次遍历都会将当前未排序部分的最大元素放到正确的位置,直到整个数组有序。

对于链表,我们可以用类似的方法来排序,具体步骤如下:

  1. 遍历链表,对于每一轮遍历,从头节点开始,依次比较相邻的节点。
  2. 如果当前节点的品种比下一个节点的品种大(即当前节点是白牛而下一个节点是黑牛),则交换这两个节点的内容,即交换品种。
  3. 继续遍历下一个节点,直到链表末尾。
  4. 重复以上步骤,直到没有需要交换的节点,此时链表就已经排好序。
全部评论

相关推荐

耀孝女:就是你排序挂了
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务