https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/javadi-gui-fang-fa-100-by-chadriy-imdgvs6udp/

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/tu-jie-kge-yi-zu-fan-zhuan-lian-biao-by-user7208t/

描述

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明 :

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解析

遍历出k个节点,然后翻转子链表,再接到原链表上。

代码

  1. //my
    public ListNode reverseKGroup(ListNode head, int k) {
  2. if (head == null || k <= 1)
  3. return head;
  4.  
  5. int temp = k;
  6. ListNode p = head;
  7. while (temp > 1) {
  8. if (p == null)
  9. break;
  10. p = p.next;
  11. temp--;
  12. }
  13. if (p == null)
  14. return head;
  15.  
  16. ListNode cur_pre = head;
  17. ListNode next_pre = p.next;
  18. p.next = null;
  19.  
  20. ListNode newHead = reverse(cur_pre);//此时cur_pre.next = null,即cur_pre为新子链表的最后一个节点
  21. p = cur_pre;
  22. head = newHead;
  23. p.next = reverseKGroup(next_pre, k);
  24. return head;
  25. }
  26.  
  27. public ListNode reverse(ListNode head) {
  28. if (head == null) {
  29. return head;
  30. }
  31. ListNode pre = null;
  32. ListNode cur = head;
  33. while (cur != null) {
  34. ListNode next = cur.next;
  35. cur.next = pre;
  36. pre = cur;
  37. cur = next;
  38. }
  39. return pre;
  40. }
  1. //注意2个节点的翻转链表即可
  2. public ListNode reverseKGroup(ListNode head, int k) {
  3. if (k <= 0) return head;
  4. int temp = k;
  5. ListNode p = head;
  6. while (temp > 1) {
  7. if (p == null) break;
  8. p = p.next;
  9. temp--;
  10. }
  11. if (p == null) return head;
  12. ListNode cur_pre = head;
  13. ListNode pNext_pre = p.next;
  14. ListNode newHead = reverseList(head, p);
  15. head = newHead;
  16. p = cur_pre;
  17. p.next = reverseKGroup(pNext_pre, k);
  18. return head;
  19. }
  20.  
  21. public ListNode reverseList(ListNode head, ListNode endNode) {
  22. ListNode pre = null;
  23. ListNode cur = head;
  24. ListNode end = endNode.next;
  25. while (cur != end) {
  26. ListNode next = cur.next;
  27. cur.next = pre;
  28. pre = cur;
  29. cur = next;
  30. }
  31. return pre;
  32. }

[LeetCode] 25. K 个一组翻转链表 ☆☆☆☆☆(链表)的更多相关文章

  1. Java实现 LeetCode 25 K个一组翻转链表

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...

  2. leetcode 25. K 个一组翻转链表

    # coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...

  3. LeetCode 25. K 个一组翻转链表 | Python

    25. K 个一组翻转链表 题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 题目 给你一个链表,每 k 个节点一组进行翻转 ...

  4. [LeetCode] 25. k个一组翻转链表

    题目链接: https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 题目描述: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链 ...

  5. LeetCode 25 —— K 个一组翻转链表

    1. 题目 2. 解答 首先,利用快慢指针确定链表的总结点数. 偶数个结点时,结点个数等于 i * 2. 奇数个结点时,结点个数等于 i * 2 + 1. 然后将链表的每 K 个结点划分为一组.循环对 ...

  6. LeetCode 25. k个一组翻转链表(Reverse Nodes in k-Group)

    题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定 ...

  7. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  8. [链表]LeetCode 25 K组一个翻转链表

    LeetCode 25 k组一个翻转链表 TITLE 示例 1: 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 示例 2: 输入:head = [1,2,3, ...

  9. 25. k个一组翻转链表

    题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定 ...

随机推荐

  1. pg_escape_string专用于转义数据库敏感字符

    (PHP 4 >= 4.2.0, PHP 5) pg_escape_string — 转义 text/char 类型的字符串 说明 string pg_escape_string ( strin ...

  2. PyCharm虚拟环(Project Interpreter)手动安装第三方包图解教程

    PyCharm虚拟环(Project Interpreter)手动安装第三方包图解教程 an鑫_wolfxin2010 关注 2018.03.13 21:58* 字数 313 阅读 3782评论 1喜 ...

  3. 接口测试中模拟post四种请求数据

    https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...

  4. node 部署教程二

    转:https://www.cnblogs.com/yesyes/p/7168449.html 这篇文章主要介绍如何在服务端跑vuejs的项目,如果上一篇教程你成功输出了hello world,那这一 ...

  5. Maven构建报错问题解决

    [ERROR] Failed to execute goal on project zepeto-admin: Could not resolve dependencies -SNAPSHOT: Fa ...

  6. 【转】Jupyter Notebook主题字体设置及自动代码补全

    Jupyter Notebook用久了就离不开了,然而自带的主题真的不忍直视.为了视力着想,为了自己看起来舒服,于是折腾了一番..在github上发现了一个jupyter-themes工具,可以通过p ...

  7. centos7.6下的python3.6.9虚拟环境安装elastalert

    centos7.6安装python3.6.9+elastalert .编译安装python3..9环境 # 安装依赖 yum -y install zlib-devel bzip2-devel ope ...

  8. dataTable.NET的column index的不同定義

    dataTable.NET是一個jQuery的plug in 第三方的library, 用來實現web page中table的interaction controls, 另外最近有在用的還有Teler ...

  9. consul删除无效实例

    consul删除无效实例删除无效服务删除无效节点删除无效服务http://127.0.0.1:8500/v1/agent/service/deregister/test-9c14fa595ddfb8f ...

  10. 讲解JavaScript中对闭包的理解

    1.JS中变量的作用域 在理解闭包之前,我们得弄清楚JS中变量的作用域原理,它分为全局作用域和局部作用域,它有一个特点就是局部可以获取全局的声明变量,而全局却不能得到局部声明的变量,我们先来看一个小例 ...