题目描述
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
Note:
- Only constant extra memory is allowed.
- You may not alter the values in the list's nodes, only nodes itself may be changed.
样例
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
思路分析
利用递归,处理k个数,即截取要反转的前k个节点做为链表;随后进行反转即可
反转链表的方式与之前类似,具体可见:单链表反转
代码
public ListNode reverseKGroup(ListNode head, int k) {
ListNode current = head;
int count = 0;
while (current != null && count != k){
current = current.next;
count++;
}
if (count == k){
current = reverseKGroup(current, k);
while (count-- > 0) {
ListNode tmp = head.next;
head.next = current;
current = head;
head = tmp;
}
head = current;
}
return head;
}
结果