1. Reverse Nodes in k-Group My Submissions QuestionEditorial Solution

    Total Accepted: 58690 Total Submissions: 212820 Difficulty: Hard

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

You may not alter the values in the nodes, only nodes itself may be changed.

Only constant memory is allowed.

For example,

Given this linked list: 1->2->3->4->5

For k = 2, you should return: 2->1->4->3->5

For k = 3, you should return: 3->2->1->4->5

当之无愧的难题,其实思路比较简明,但是要写出完全无bug的代码简直太难了,改了很多遍才改到无bug,因为里面的指针运算太多了,一不注意就掉坑了,改变了指针所向内容的next,确仍然引用

结果:

Submission Details

81 / 81 test cases passed.

Status: Accepted

Runtime: 24 ms

beats:41.82%

思路:找到每一段末尾标记,然后该段范围内进行逆转,同时保留逆转后的末尾元素。

class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(head==NULL||head->next==NULL||k==1)return head;
ListNode *fir=head,*sec=head,*pre_fir=NULL,*pre_sec=NULL;
int finished=0;
int count=1;
while(!finished){
int i=1;
while(i++<k&&sec!=NULL){sec=sec->next;} //fir.....sec段总的K个元素
ListNode *sec_next=(sec==NULL)?NULL:sec->next;
if((i-1)==k&&(sec!=NULL)){ //注意,只有当找了k次且最后一次找到了(不为空)才进行这段元素原地逆转
ListNode *tmp = fir->next; //逆转时的当前元素
ListNode *prenode = fir; //逆转时保留的前一元素
while(tmp!=sec_next) //当前元素没到sec末尾元素,
{
ListNode *nextnode = (tmp->next); //保存当前元素的下一元素
tmp->next = prenode; //当前元素指向前一个元素
prenode = tmp; //前一元素右移
tmp = nextnode; //当前元素右移
}
fir->next = NULL; //第一段的首元素变成末尾元素。
if(pre_fir!=NULL){pre_fir->next = prenode;pre_fir = fir;}//pre_fir上一段逆转后的末尾指向当前的逆转后的开头
else {head = prenode;pre_fir=fir;}//针对第一次前一段的逆转前的为空
fir = sec_next; //开始下一段元素逆转,sec_next保存上一段sec的下一元素
sec = fir; //将sec置为fir一样的值,开始逆转流程。
}
else {
finished = 1;
if(pre_fir!=NULL)pre_fir->next = fir;
}
}
return head;
}
};

43-Reverse Nodes in k-Group的更多相关文章

  1. [Leetcode] Reverse nodes in k group 每k个一组反转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  2. Reverse Nodes In K Group,将链表每k个元素为一组进行反转---特例Swap Nodes in Pairs,成对儿反转

    问题描述:1->2->3->4,假设k=2进行反转,得到2->1->4->3:k=3进行反转,得到3->2->1->4 算法思想:基本操作就是链表 ...

  3. 【Reverse Nodes in k-Group】cpp

    题目: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list ...

  4. Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表)

    Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表) 题目描述 已知一个链表,每次对k个节点进行反转,最后返回反转后的链表 测试样例 Inpu ...

  5. [LintCode] Reverse Nodes in k-Group 每k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  6. LeetCode 25 Reverse Nodes in k-Group Add to List (划分list为k组)

    题目链接: https://leetcode.com/problems/reverse-nodes-in-k-group/?tab=Description   Problem :将一个有序list划分 ...

  7. LeetCode 笔记系列六 Reverse Nodes in k-Group [学习如何逆转一个单链表]

    题目:Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. ...

  8. LeetCode: Reverse Nodes in k-Group 解题报告

    Reverse Nodes in k-Group Given a linked list, reverse the nodes of a linked list k at a time and ret ...

  9. 25.Reverse Nodes in k-Group (List)

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  10. Leetcode 25/24 - Reverse Nodes in k-Group

    题目描述 Leetcode 24 题主要考察的链表的反转,而 25 题是 24 的拓展版,加上对递归的考察. 对题目做一下概述: 提供一个链表,给定一个正整数 k, 每 k 个节点一组进行翻转,最后返 ...

随机推荐

  1. Vue 报错Error in render: “TypeError: Cannot read properties of null (reading ‘xxx’)” found in

    前端vue报错 [Vue warn]: Error in render: "TypeError: Cannot read properties of null (reading 'name' ...

  2. js--数组的 fill() 填充方法详解

    前言 我们知道了很多了初始化数组的方法,但是初始化数组之后,数组中的每一项元素默认为 empty 空位占位,如何对数组这些空位添加默认的元素,ES6提供了 fill() 方法实现这一操作.本文总结数组 ...

  3. NGINX杂谈——flask_limiter的IP获取(怎么拿到真实的客户端IP)

    本篇博客将 flask_limiter 作为切入点,来记录一下自己对 remote_addr 和 proxy_add_x_forwarded_for 两个变量.X-Real-IP 和 X-Forwar ...

  4. 【SDOI2014】数数(补)

    见 AC自动机(补坑了) [SDOI2014] 数数 简要题意:  我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为子串.例如当S={22,333,0233}时 ...

  5. Manacher(马拉车)

    Able was I ere I saw Elba.     ----Napoléon Bonaparte(拿破仑) 一.回文串&回文子串   这个很好理解. 如果一个字符串正着读和反着读是一 ...

  6. Go语言核心36讲(Go语言进阶技术十三)--学习笔记

    19 | 错误处理(上) 提到 Go 语言中的错误处理,我们其实已经在前面接触过几次了. 比如,我们声明过error类型的变量err,也调用过errors包中的New函数. 我们说过error类型其实 ...

  7. centos 下安装docker

    官方文档比较累赘,简化就三步 1.安装依赖 yum -y install gcc gcc-c++ yum-utils device-mapper-persistent-data lvm2 2.添加re ...

  8. CentOS7 安装oracle 11g (11.2.0.1.0)

    1.安装依赖: #yum -y install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ks ...

  9. part 36 AngularJS route reload

    In this video we will discuss angular route service reload() method. This method is useful when you ...

  10. js实现全选与全部取消功能

    function checkAll() { //把所有参与选择的checkbox使用相同的name,这里为"num_iid"    var eles = document.getE ...