题解 | #牛群链式排序#

牛群链式排序

https://www.nowcoder.com/practice/ff7a50831e1a493b80de70cbb634cb0a?tpId=363&tqId=10606233&ru=/exam/oj&qru=/ta/super-company23Year/question-ranking&sourceUrl=%2Fexam%2Foj

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 swapCows (ListNode head) {
        // 当队列为空或只有一个牛时,无需排序,直接返回
        if (head == null || head.next == null) {
            return head;
        }

        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode prev = dummy; // 前驱节点
        ListNode curr = head; // 当前节点

        while (curr != null && curr.next != null) {
            ListNode nextNode = curr.next; // 下一个节点

            curr.next = nextNode.next; // 当前节点指向下下个节点
            nextNode.next = curr; // 下一个节点指向当前节点
            prev.next = nextNode; // 前驱节点指向下一个节点

            prev = curr; // 更新前驱节点为当前节点
            curr = curr.next; // 更新当前节点为下一个节点
        }

        return dummy.next; // 返回交换后的牛群的链表头节点
    }
}

本题知识点分析:

1.链表反转

2.数学模拟

本题解题思路分析:

1.当队列为空或只有一个牛时,无需排序,直接返回

2.分别保存前驱结点和当前节点

3.注意循环条件 while (curr != null && curr.next != null)

4.循环内代码按注释即可知晓

5.链表的题目画图,然后按图翻译就可以了,注意虚拟头结点问题,然后什么时候判空

本题使用编程语言: Java

如果您觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~

全部评论

相关推荐

拿到了ssp的小鲸鱼...:满分160做90+是吧
投递中国电信等公司10个岗位
点赞 评论 收藏
分享
09-30 15:27
已编辑
成都工业学院 企业文化
Morpheus_:候选人:还需要测验武力值?
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务