leetcode:25. K 个一组翻转链表
题目描述
给你链表的头节点 head ,每 k **个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k **的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
示例
输入: head = [1,2,3,4,5], k = 2
输出: [2,1,4,3,5]
解题思路
- 对
[0, k - 1]子链表进行翻转。
- 后续递归处理。
完整代码:
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if (length(head) < k) return head;
ListNode dummy = new ListNode(-1), p = head;
for (int i = 0; i < k; i++) {
ListNode next = p.next;
p.next = dummy.next;
dummy.next = p;
p = next;
}
head.next = reverseKGroup(p, k);
return dummy.next;
}
int length(ListNode head) {
int len = 0;
while (null != head) {
len++;
head = head.next;
}
return len;
}
}