赞
踩
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
class Solution {
// 失败
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode cur = dummy;
int count = 0;
ListNode preK = null;
while (cur != null) {
if (count == 0) {
preK = cur;
}
if (count == k) {
ListNode p1 = preK.next;
ListNode p2 = cur.next;
// 先断开这k个节点的前后
preK.next = null;
cur.next = null;
// 反转
reverse(p1);
// 再链接
preK.next = cur;
p1.next = p2;
// 继续遍历
cur = p1;
count = 0;
} else {
cur = cur.next;
count++;
}
}
return dummy.next;
}
public void reverse(ListNode head){
if(head == null || head.next == null){
return;
}
ListNode pre = null;
ListNode cur = head;
ListNode next = null;
while(cur != null){
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。