LeetCode25. Reverse Nodes in k-Group(每k个节点反转链表,java实现)

11 篇文章 0 订阅
10 篇文章 0 订阅
  • 问题描述

k个一组反转链表。

  • 解决方案

代码如下:


 public class ReverseKGroup {
    public static void main(String[] args){
        ListNode root = new ListNode(1);
        root.next = new ListNode(2);
        root.next.next = new ListNode(3);
        root.next.next.next = new ListNode(4);
        root.next.next.next.next = new ListNode(5);
        root.next.next.next.next.next = new ListNode(6);
        ListNode root2 = reverseKGroup(root,5);
        while(root2 != null){
            System.out.print(root2.val + "->");
            root2 = root2.next;
        }
    }

        public static ListNode reverseKGroup(ListNode head,int k){
            if(head == null)
                return head;
            ListNode[] arr = invertHelp(head,k);
            ListNode head2 = arr[0];
            ListNode result = head2;
            ListNode tail = arr[1];
            while(tail.next != null){
                ListNode[] temp = invertHelp(tail.next,k);
                tail.next = temp[0];
                tail = temp[1];
            }
            return result;
        }

        //给定一个链表,反转前k个节点,然后返回反转部分链表的头和尾
        public static ListNode[] invertHelp(ListNode root,int k){
            ListNode[] result = new ListNode[2];
            ListNode head = root;
            ListNode tail = root;
            result[0] = head;
            result[1] = tail;
            int size = 1;
            while(tail.next != null && size < k){
                ListNode next = tail.next.next;
                ListNode cur = tail.next;
                cur.next = head;
                head = cur;
                tail.next = next;
                result[0] = head;
                result[1] = tail;
                size ++;
            }
            if(size != k)
                return invertHelp( result[0],size);
            return result;
        }
    }
    
   class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值