给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
?
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0), prev = dummy, curr = head, next;
dummy.next = head;//开一个亚节点
int length = 0;
//先找到链表长度
while(head != null) {
length++;
head = head.next;
}
head = dummy.next;//head恢复
//限制条件一定要做好: i<len/k j<k-1
for(int i = 0; i < length / k; i++) {
for(int j = 0; j < k - 1; j++) {
next = curr.next;//找到中间的那个
curr.next = next.next;//当前的下一个指向中间的后面的那个
next.next = prev.next;//中间的那个指向头上的那个
prev.next = next;//最前边的下一个指向中间的那个
}
prev = curr;//前面的那个等于当前
curr = prev.next;//当前的那个后移
}
return dummy.next;
}
}
?
|