一、题目
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
二、题解
public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
if(k <= 1) return head;
if(head == null) return head;
ListNode node = head;
int len = length(head);
head = node;
int sx = len / k; //分成sx块向下取整(默认向下) 因为处不尽的后面必然凑不满k个
ListNode result = new ListNode(0);
ListNode now = result;
int cnt = 0;
for(int i = 0; i < sx; i ++){
ListNode tmp = null;
for(int j = 0; j < k; j ++){ //将第i块的元素翻转
ListNode bl = head.next;
head.next = tmp;
tmp = head;
head = bl;
}
now.next = tmp;
while(now.next != null) now = now.next; //将now更新到最前的一个点
}
now.next = head;
return result.next;
}
public int length(ListNode now){ //获取链表长度
int cnt = 0;
if(now != null) cnt = 1;
while(now.next != null){
cnt ++; now = now.next;
}
return cnt;
}
}
标签:ListNode,int,param,节点,链表,必刷,TOP101,翻转
From: https://blog.51cto.com/u_16244372/7863064