题目描述
描述
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
例如:
给定的链表是 1→2→3→4→5
对于 k = 2 , 你应该返回 2→1→4→3→5
对于 k = 3 , 你应该返回3→2→1→4→5
实例一:
输入数据:{1,2,3,4,5},2
返回结果{2,1,4,3,5}
实例二:
输入数据:{},1
返回结果{}
求解思路&实现代码
import java.util.*;
public class Solution {
public ListNode reverseKGroup (ListNode head, int k) {
//找到每次翻转的尾部 fast-template
ListNode tail = head;
//遍历k次到尾部
for (int i = 0; i < k; i++) {
//如果不足k到了链表尾,直接返回,不翻转
if (tail == null)
return head;
tail = tail.next;
}
//翻转时需要的前序和当前节点
ListNode pre = null;
ListNode cur = head;
//在到达当前段尾节点前
while (cur != tail) {
//翻转
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
//当前尾指向下一段要翻转的链表
head.next = reverseKGroup(tail, k);
return pre;
}
}