给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例:
给你这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
作者亲测可直接运行!!!!!!!!
class Solution {
public static ListNode reverseKGroup(ListNode head, int k) {
if (head == null || k == 0) {
return head;
}
ListNode prevGroupLast = new ListNode(-1);
prevGroupLast.next = head;
ListNode root = prevGroupLast;
ListNode cur = prevGroupLast.next;
ListNode curGroupFirst = null;
ListNode prev = null;
int i = 0;
while (cur != null) {
ListNode next = cur.next;
if (i < k) {
if (i == 0) {
curGroupFirst = cur;
}
cur.next = prev;
prev = cur;
cur = next;
i++;
} else {
prevGroupLast.next = prev;
prevGroupLast = curGroupFirst;
i = 0;
prev = null;
}
}
if (i < k) {
cur = prev;
prev = null;
while (cur != null) {
ListNode next = cur.next;
cur.next = prev;
prev = cur;
cur = next;
}
prevGroupLast.next = curGroupFirst;
} else {
prevGroupLast.next = prev;
}
return root.next;
}
public static void printListNode(ListNode l) {
while (null != l) {
System.out.println(l.val);
l = l.next;
}
}
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1, new ListNode(4, new ListNode(8, new ListNode(9, new ListNode(6)))));
ListNode resultListNode = reverseKGroup(listNode1,3);
printListNode(resultListNode);
}
}
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}