问题:给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
//排除空指针和单个结点
if(head== null || head.next==null){
return head;
}
ListNode start = head, end = head;
for(int i = 0; i <k; i++){
if(end==null) return start;
end = end.next;
}
//返回的头结点
ListNode tempNode = reverse(start,end);
//迭代方式
start.next=reverseKGroup(end, k);
return tempNode;
}
// 翻转 [start, end) 区间的链表
private ListNode reverse(ListNode start, ListNode end) {
ListNode prev = null;
ListNode curr = start;
ListNode next = null;
while (curr != end) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}