题目
给你链表的头节点
head
,每k
个节点一组进行翻转,请你返回修改后的链表。
k
是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k
的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
解题思路
- 先排除特殊情况,k==1即不用翻转,节点为null则当前函数内也不需要翻转;
- 统计是否有k个数据来判断是否需要翻转;
- 通过while循环对k个节点进行翻转,尾节点传入下一次递归当中;
- 返回首节点,并赋值给上一个尾节点的next。
代码展示
class Solution {public ListNode reverseKGroup(ListNode head, int k) {if(k == 1){return head;}if(head == null){return null;}int index = 1;ListNode end = head.next;//判断是否需要继续翻转boolean status = false;while (end != null){index++;if(index == k){status = true;break;}//递归需要传递的数据end = end.next;}if(status){ListNode before = end.next;ListNode now = head;index = 0;while (index < k){ListNode temp = now.next;now.next = before;before = now;now = temp;index++;}head.next = reverseKGroup(head.next, k);} else {return head;}return end;}
}