NB1 删除链表峰值

描述

农场主人有一群牛,他给每只牛都打了一个编号,编号由整数表示。这些牛按照编号的大小形成了一个链表。现在农场主人想删除链表中比前后结点值都大的牛的编号,你能帮他设计一个算法来实现这个功能吗?注意,只考虑删除前,首尾的牛的编号不删除。

示例1

输入:

{1,3,2,4,5}

返回值:

{1,2,4,5}

示例2

输入:

{5,4,3,2,1}

返回值:

{5,4,3,2,1}

备注:

链表长度[0, 10000]
0 < Node.val <= 10000

NB2 牛群排列去重

描述

农场里有一群牛,每头牛都有一个独特的编号,编号由一个整数表示,整数范围是[0, 200]。牛群中的牛用单链表表示,链表已经按照非降序排列。

因为一些事故,导致一头牛可能多次出现在链表中。给你一个链表的头 head,删除链表中所有重复的编号,只留下所有牛的不重复编号。返回已排序的链表。

示例1

输入:

{1,2,2,3,3,4,5,5}

返回值:

{1,2,3,4,5}

备注:

链表中节点数目在范围 [0, 1000] 内
0 <= Node.val <= 200

NB3 调整牛群顺序

描述

农场里有一群牛,每头牛都有一个编号,编号由一个整数表示,整数范围是[0, 100]。牛群中的牛用单链表表示。

现在,农场主想要调整牛群的顺序。给你一个链表,将链表中的倒数第 n 个结点移到链表的末尾,并且返回调整后的链表的头结点。

示例1

输入:

{1,2,3,4,5},2

返回值:

{1,2,3,5,4}

备注:

链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

NB4 牛群的重新分组

描述

农场里有一群牛,每头牛都有一个编号,编号由一个整数表示,整数范围是[0, 1000]。牛群中的牛用单链表表示。

现在,农场主想要重新分组牛群。给定一个单链表的头指针 head 和一个整数 k,每 k 个节点一组进行翻转,请你返回修改后的牛群链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例1

输入:

{1,2,3,4,5},2

返回值:

{2,1,4,3,5}

示例2

输入:

{1,2,3,4,5},3

返回值:

{3,2,1,4,5}

备注:

链表中的节点数目为 n
1 <= k <= n <= 5000
0 <= Node.val <= 10000

NB5 牛群的重新排列

描述

农场里有一群牛,每头牛都有一个编号,编号由一个整数表示,整数范围是[-500, 500]。牛群中的牛用单链表表示。

现在,农场主想要改变牛群的排列顺序。给定一个单链表的头指针 head 和两个整数 left 和 right,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的牛群链表。

示例1

输入:

{1,2,3,4,5},2,4

返回值:

{1,4,3,2,5}

备注:

链表中节点数目为 n
1 <= n <= 1000
-500 <= Node.val <= 500
1 <= left <= right <= n

NB6 合并两群能量值

描述

农场里有两群牛,每群牛都有一定的能量值。能量值由一个整数表示,整数范围是[-100, 100]。每群牛的能量值已经按照非递增顺序排列,并存储在链表中。

现在,你需要将这两群牛的能量值合并为一个新的非递增链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例1

输入:

{4, 2, 1},{4, 3, 1}

返回值:

{4,4,3,2,1,1}

示例2

输入:

{},{0}

返回值:

{0}

备注:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按非递增顺序排列

NB7 牛群的能量值

描述

农场里有两群牛,每群牛都有一定的能量值。能量值由一个非负整数表示,且每头牛的能量值只有一位数字。能量值按照逆序的方式存储在链表中,即链表的第一个节点表示个位,第二个节点表示十位,以此类推。

现在,你需要将这两群牛的能量值相加,然后以相同的逆序形式返回表示和的链表。

注意:除了数字0之外,这两个数都不会以0开头。

示例1

输入:

{9, 8, 7, 6, 5},{ 1, 1, 1, 1, 1}

返回值:

{0,0,9,7,6}

说明:

56789+11111=67900

备注:

每个链表中的节点数在范围 [1, 500] 内
0 <= Node.val <= 9

NB8 牛牛队列成环

描述

农场里有一群牛,它们被组织成一个链表形式的队列。每头牛都有一个编号(每只牛编号唯一),编号范围是[-105, 105]。每头牛都有一个指针,指向它后面的一头牛。但是,有一些顽皮的牛可能会指向它们前面的某一头牛,从而形成一个环。

现在,给你一个链表的头节点 head,判断这个牛队列中是否有环。

示例1

输入:

{3,2,0,-4,2,0,-4,2,0,-4,2,0,-4,2,0,-4,2,0,-4}

返回值:

true

NB9 牛群分隔

描述

农场里有一群牛,每头牛都有一个编号,编号由一个整数表示,整数范围是[0, 100],同时也表示牛的体重级别。牛群中的牛用单链表表示。

现在,农场主想要调整牛群的顺序,使体重较大的牛在一边,体重较小的牛在一边。给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。

你应当保留两个分区中每个节点的初始相对位置。

示例1

输入:

{1,2,3,4,5,6,7,8,9},5

返回值:

{1,2,3,4,5,6,7,8,9}

示例2

输入:

{4,3,2,5,2},3

返回值:

{2,2,4,3,5}

备注:

链表中节点的数目在范围 [0, 200] 内
0 <= Node.val <= 100
0 <= x <= 200

NB10 牛群旋转

描述

农场里有一群牛,每头牛都有一个编号,编号由一个整数表示,整数范围是[-100, 100]。牛群中的牛用单链表表示。

现在,农场主想要调整牛群的顺序。给你一个链表的头节点 head ,将链表每头牛向右移动 k 个位置。

示例1

输入:

{1,2,3,4,5,6,7,8,9},3

返回值:

{7,8,9,1,2,3,4,5,6}

示例2

输入:

{1,2,3},4

返回值:

{3,1,2}

备注:

链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100
0 <= k <= 2 * 10^9

NB11 牛群的合并

描述

农场主人有多个牛群,每个牛群中的牛都按照编号升序排列。现在农场主人想把所有牛群合并成一个大牛群,同时要求合并后的大牛群中的牛依然按照编号升序排列。请你编写一个程序,实现这个功能。

示例1

输入:

[{2,4,5},{1,3,4},{2,8}]

返回值:

{1,2,2,3,4,4,5,8}

备注:

k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 1000
0 <= lists[i][j] <= 5000
lists[i] 按 升序 排列
lists[i].length 的总和不超过 10000

NB12 牛群的身高排序

描述

农场主人记录了一群牛的身高,并将它们按照链表的形式存储。链表的头结点为 head,请你将这些身高数据按升序排列,并返回排序后的链表。

示例1

输入:

{4,2,1,3}

返回值:

{1,2,3,4}

示例2

输入:

{5, 0, 3, 4}

返回值:

{0,3,4,5}

备注:

链表中节点的数目在范围 [0, 5000] 内
0 <= Node.val <= 10000

NB13 牛的品种排序IV

描述

在一个牧场中,有n头牛,牛的品种分为黑牛和白牛,用0和1分别表示。现在需要对牛群进行排序,使得相同品种的牛相邻,并按照黑牛和白牛的顺序排列。这些牛是按照链表的形式存储的。

请你在不使用库内置的sort函数的情况下解决这个问题。

示例1

输入:

{1,0,1,0,1,0}

返回值:

{0,0,0,1,1,1}

示例2

输入:

{1,0,0}

返回值:

{0,0,1}

备注:

n == cows.length
1 <= n <= 3000
Node.val 为 0 或 1

NB14 牛群编号的回文顺序

描述

农场里有一些牛,每头牛都有一个编号(0-9)。这些牛按照一定的顺序站立,我们可以把这个顺序看作是一个单链表,牛的编号就是链表的节点。现在农场主想知道,这些牛的编号顺序是否是回文的。如果是,返回 true ;否则,返回 false 。

示例1

输入:

{1,2,3,2,1}

返回值:

true

示例2

输入:

{1,3,4}

返回值:

false

备注:

链表中节点数目为n
1 <= n <= 10^5
0 <= Node.val <= 9

NB15 牛群编号的回文顺序II

描述

农场里有一些牛,每头牛都有一个编号(0-9)。这些牛按照一定的顺序站立,我们可以把这个顺序看作是一个单链表,牛的编号就是链表的节点。现在农场主想知道,这些牛的编号顺序是否是回文的。如果是,则返回空链表;如果不是,返回最大的连续回文子链表的头节点(保证唯一)。

示例1

输入:

{1,2,3,2,1,4,5,6,7,8,9,0}

返回值:

{1,2,3,2,1}

示例2

输入:

{1,1,2,3,4,5,6,7,8,9,0}

返回值:

{1,1}

备注:

链表中节点数目n
1 <= n <= 100
0 <= Node.val <= 9