NC50 链表中的节点每k个一组翻转
- 题目
- 题解(134)
- 讨论(266)
- 排行
中等 通过率:37.91% 时间限制:1秒 空间限制:64M
知识点链表
描述
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
数据范围: 0≤n≤2000 0≤n≤2000 , 1≤k≤20001≤k≤2000 ,链表中每个元素都满足 0≤val≤10000≤val≤1000
要求空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
例如:
给定的链表是 1→2→3→4→51→2→3→4→5
对于 k=2k=2 , 你应该返回 2→1→4→3→52→1→4→3→5
对于 k=3k=3 , 你应该返回 3→2→1→4→53→2→1→4→5
示例1
输入:
{1,2,3,4,5},2
复制返回值:
{2,1,4,3,5}
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
ListNode a = head;
ListNode b = head;
for(int i = 0; i < k; i++){
if(b == null) return head;
b = b.next;
}
ListNode temp = help(head, a, b);
ListNode temp1 = reverseKGroup(b, k);
head.next = temp1;
return temp;
}
public ListNode help(ListNode head, ListNode a, ListNode b){
ListNode pre = null;
ListNode cur = a;
ListNode nxt = a;
while(cur!=b){
nxt = cur.next;
cur.next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
}