营销型网站优点,网络营销毕业设计,素材天下网站,科技手抄报内容2074. 反转偶数长度组的节点
给你一个链表的头节点 head 。
链表中的节点 按顺序 划分成若干 非空 组#xff0c;这些非空组的长度构成一个自然数序列#xff08;1, 2, 3, 4, …#xff09;。一个组的 长度 就是组中分配到的节点数目。换句话说#xff1a;
节点 1 分配给…2074. 反转偶数长度组的节点
给你一个链表的头节点 head 。
链表中的节点 按顺序 划分成若干 非空 组这些非空组的长度构成一个自然数序列1, 2, 3, 4, …。一个组的 长度 就是组中分配到的节点数目。换句话说
节点 1 分配给第一组节点 2 和 3 分配给第二组节点 4、5 和 6 分配给第三组以此类推 注意最后一组的长度可能小于或者等于 1 倒数第二组的长度 。
反转 每个 偶数 长度组中的节点并返回修改后链表的头节点 head 。 示例 1 输入head [5,2,6,3,9,1,7,3,8,4] 输出[5,6,2,3,9,1,4,8,3,7] 解释
第一组长度为 1 奇数没有发生反转。第二组长度为 2 偶数节点反转。第三组长度为 3 奇数没有发生反转。最后一组长度为 4 偶数节点反转。 示例 2 输入head [1,1,0,6] 输出[1,0,1,6] 解释
第一组长度为 1 没有发生反转。第二组长度为 2 节点反转。最后一组长度为 1 没有发生反转。 示例 3
输入head [2,1] 输出[2,1] 解释
第一组长度为 1 没有发生反转。最后一组长度为 1 没有发生反转。
示例 4
输入head [8] 输出[8] 解释只有一个长度为 1 的组没有发生反转。
提示
链表中节点数目范围是 [1,105][1, 10^5][1,105]0 Node.val 10510^5105
解题思路
按组遍历每个链表根据每个组的编号决定每个组内应该存在多少个链表节点对于偶数长度的节点先将每个组的所有链表节点分隔出来再将每组节点完成一次链表逆置再重新连接到原链表上。
代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode *reverse(ListNode *head,ListNode *end,int group){ListNode * prehead,*curhead-next;pre-nextend;for (int i 0; i group-1cur! nullptr; i) {ListNode *nextcur-next;cur-nextpre;precur;curnext;}return pre;}ListNode *reverseEvenLengthGroups(ListNode *head) {ListNode *cur head-next,*oldhead,*prehead;int group_no 2;while (cur! nullptr) {int res(0);ListNode *tempcur;for (int i 0; i group_notemp! nullptr ; i) {temptemp-next;res;}if (res%20){ListNode *tempcur;for (int i 0; i group_notemp! nullptr ; i) {temptemp-next;}ListNode *next_precur;pre-nextreverse(cur,temp,group_no);prenext_pre;curtemp;} elsefor (int i 0; i group_nocur! nullptr; i) {precur;curcur-next;}group_no;}return old;}
};