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

牛的品种排序IV

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

考察的知识点:链表的分割和合并;

解答方法分析:

  1. 定义两个新的链表指针zeroone,分别表示值为0和值为1的节点链表的头节点。
  2. 初始化两个当前节点指针curZerocurOne,分别指向zeroone的尾节点。
  3. 遍历原始链表,根据节点值的不同将节点放入对应的链中。具体操作如下:如果节点的值为0,将其放入值为0的链表中,更新curZero为当前节点。如果节点的值为1,将其放入值为1的链表中,更新curOne为当前节点。
  4. 遍历结束后,将值为0的链表的尾节点指向值为1的链表的头节点,完成合并操作。
  5. 返回值为0的链表的头节点,即为排序后的链表。

所用编程语言:C++;

完整编程代码:↓

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    ListNode* sortCowsIV(ListNode* head) {
        if (head == nullptr || head->next == nullptr) return head;
        ListNode* zero = new ListNode(0);
        ListNode* one = new ListNode(0);
        ListNode* curZero = zero;
        ListNode* curOne = one;
        while (head != nullptr) {
            if (head->val == 0) {
                curZero->next = head;
                head = head->next;
                curZero = curZero->next;
                curZero->next = nullptr;
            } else {
                curOne->next = head;
                head = head->next;
                curOne = curOne->next;
                curOne->next = nullptr;
            }
        }
        curZero->next = one->next;
        return zero->next;
    }
};

全部评论

相关推荐

07-21 18:43
门头沟学院 Java
是暑期都招满了吗
ANEOY:今年感觉真是后端地狱级难度了,从暑期就是这样,前端需求非常大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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