一、题目
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
二、题解
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode beginNode = dummyHead;
ListNode endNode = dummyHead;
ListNode nextNode, preNode;
while (endNode.next != null) {
for (int i = 0; i < k && endNode != null; i++) {
endNode = endNode.next;
}
if (endNode == null) {
break;
}
preNode = beginNode.next;
nextNode = endNode.next;
endNode.next = null;
beginNode.next = reverse(preNode);
preNode.next = nextNode;
beginNode = preNode;
endNode = preNode;
}
return dummyHead.next;
}
public ListNode reverse(ListNode head) {
ListNode curNode = head;
ListNode tempNode, preNode=null;
while (curNode != null) {
tempNode = curNode.next;
curNode.next = preNode;
preNode = curNode;
curNode = tempNode;
}
return preNode;
}
}
|