leetcode 25 Reverse Nodes in k-Group

╰+攻爆jí腚メ 2022-12-20 11:15 172阅读 0赞

给一个链表,每k个节点一组进行反转,输出反转后的链表

hard难度,但突破点很好找,具体解体思路,看下面代码中每行注释

  1. public class LC25 {
  2. public static void main(String[] args) {
  3. ListNode listNode = new ListNode(1, new ListNode(2,
  4. new ListNode(3, new ListNode(4, new ListNode(5, null)))));
  5. ListNode result = new LC25().reverseKGroup(listNode, 2);
  6. while (result!=null){
  7. System.out.print(result);
  8. result = result.next;
  9. }
  10. }
  11. /** * k个元素一组做划分 * 每组进行反转(需要记录每组的头[达到分组条件时需要用到这个头进行循环当前组]) * 反转后的尾与反转后的头连接(需要记录上一组反转后的尾[也就是未反转时的头]) * @param head * @param k * @return */
  12. public ListNode reverseKGroup(ListNode head, int k) {
  13. if (k == 1 || head == null || head.next == null) {
  14. return head;
  15. }
  16. //迭代数量
  17. int n = 0;
  18. //记录每一段的第一个
  19. ListNode first = head;
  20. //记录上一段第一个
  21. ListNode lastFirst = null;
  22. //临时循环变量,分组用[达到分组条件时,为当前组的最后一个]
  23. ListNode tem = first;
  24. //记录第一组的尾[反转后整个链表的头]
  25. ListNode tail = null;
  26. while (tem != null) {
  27. n++;
  28. //满足分组条件
  29. if (n == k) {
  30. //达到k,重置
  31. n = 0;
  32. ListNode middle = first.next;
  33. //上一段头,指向新一段尾
  34. if(lastFirst != null) {
  35. lastFirst.next = tem;
  36. }
  37. lastFirst = first;
  38. //指针变换,first middle last依次后移
  39. while (middle != null && middle != tem) {
  40. ListNode last = middle.next;
  41. middle.next = first;
  42. first = middle;
  43. middle = last;
  44. }
  45. if(tail == null){
  46. //记录第一组的尾
  47. tail = tem;
  48. }
  49. tem = tem.next;
  50. //当前组最后两元素变换指针
  51. middle.next = first;
  52. first = tem;
  53. continue;
  54. }
  55. tem = tem.next;
  56. }
  57. //最后一组未满足k个元素时,元素做关联
  58. lastFirst.next = first;
  59. return tail;
  60. }
  61. public static class ListNode {
  62. int val;
  63. ListNode next;
  64. ListNode() {
  65. }
  66. ListNode(int val) {
  67. this.val = val;
  68. }
  69. ListNode(int val, ListNode next) {
  70. this.val = val;
  71. this.next = next;
  72. }
  73. @Override
  74. public String toString() {
  75. return val+" ";
  76. }
  77. }
  78. }

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,172人围观)

还没有评论,来说两句吧...

相关阅读