import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
// 反转链表,时间复杂度o(n),空间复杂度o(1)
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
if (head == null || k < 1) return head;
ListNode node = head;
int len = getLen(head);
// 元节点
ListNode dummy = new ListNode(1);
ListNode cur = dummy;
for (int i = 0; i < len / k; i++){
// 临时节点
ListNode temp = null;
for (int j = 0; j < k; j++){
ListNode next = node.next;
node.next = temp;
temp = node;
node = next;
}
cur.next = temp;
while (cur.next != null) cur = cur.next;
}
cur.next = node;
return dummy.next;
}
// 获取链表长度
private int getLen(ListNode node){
int len = 0;
while (node != null){
node = node.next;
len++;
}
return len;
}
}
牛客网:NC50 链表中的节点每k个一组翻转
最新推荐文章于 2024-07-25 15:58:50 发布