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

牛的品种排序IV

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

该题考察的知识点:

  • 链表的基本操作
  • 链表节点值的分组

代码纲要:

  1. 检查边界条件,如果链表为空或者只有一个节点,无需排序,直接返回链表头节点。
  2. 创建两个哑节点,一个表示值为 0 的链表,一个表示值为 1 的链表,并初始化末尾节点指针。
  3. 遍历原始链表,根据节点的值将其连接到对应的链表中,同时更新末尾节点指针。
  4. 将值为 0 的链表的末尾指向值为 1 的链表的头部,并将值为 1 的链表的末尾设置为 null。
  5. 返回排序后的链表头节点。
import java.util.*;

public class Solution {
    /**
     * 将链表中的节点按值 0 和 1 分组
     *
     * @param head 链表头节点
     * @return 排序后的链表头节点
     */
    public ListNode sortCowsIV(ListNode head) {
        // 如果链表为空或者只有一个节点,无需排序,直接返回链表头节点
        if (head == null || head.next == null) {
            return head;
        }

        // 创建两个哑节点,分别表示值为 0 的链表和值为 1 的链表
        ListNode zeroDummy = new ListNode(0);
        ListNode oneDummy = new ListNode(0);
        ListNode zeroTail = zeroDummy;  // 用于追踪值为 0 的链表的末尾节点
        ListNode oneTail = oneDummy;    // 用于追踪值为 1 的链表的末尾节点

        ListNode curr = head;
        while (curr != null) {
            // 根据节点的值将其连接到对应的链表中
            if (curr.val == 0) {
                zeroTail.next = curr;
                zeroTail = zeroTail.next;
            } else {
                oneTail.next = curr;
                oneTail = oneTail.next;
            }
            curr = curr.next;
        }

        // 将值为 0 的链表的末尾指向值为 1 的链表的头部,并将值为 1 的链表的末尾设置为 null
        zeroTail.next = oneDummy.next;
        oneTail.next = null;

        // 返回排序后的链表头节点
        return zeroDummy.next;
    }
}

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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