LeetCode第二十五题-反转链表中k组节点

Reverse Nodes in k-Group

问题简介:
给定链表,反转链表中每k个节点并返回其修改后的链表.
注:k是正整数,如果节点数不是k的倍数,那么最后的剩余节点应该保持不变.

举例:
给定的链表: 1->2->3->4->5

当 k = 2, 输出: 2->1->4->3->5

当 k = 3, 输出: 3->2->1->4->5

链表结构:

 // Definition for singly-linked list.
  public class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
  }

解法一:
当k=1为输入链表本身,当k大于链表即返回链表本身,将链表添加到集合中,每k个元素进行截取反转并添加到新集合中,将新集合输入到结果链表中

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
    if(k < 1)return null;
    if(k == 1)return head;
    int length = 0;
    ListNode len = head;
    List<Integer> list = new ArrayList<>();
    while(len!=null){
        length++;
        list.add(len.val);
        len = len.next;
    }
    List<Integer> result = new ArrayList<>();
    for(int i = 0;i<length;i=i+k){
        if( i+k > length ){
            List l = list.subList(i,length);
            result.addAll(l);
        }else{
        List l = list.subList(i,i+k);
        Collections.reverse(l);
        result.addAll(l); 
        }
    }
    ListNode listNode = new ListNode(0);
    ListNode ln = listNode;
    for(int j=0;j<length;j++){
        ln.next = new ListNode(result.get(j));
        ln = ln.next;
    }
    return listNode.next;   
    }
    }

复杂度分析:
时间复杂度:o(n)都是单层遍历
空间复杂度:o(n)最大为n次定义集合元素
注:
List list = new ArrayList();
1.截取list的一部分:
List result = list.subList(1,n)
截取的是list集合中索引1到n-1的值,数学中的左闭右开,[1,n)
2.集合list的反转
Collections.reverse(list)

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值