算法
实现一个函数,输入链表头部和整数K,实现功能:
链表从后往前,每K个结点反转一下,假如头部有剩余结点,则保持不变,如
输入:1 -> 2 -> 3 -> 4 -> 5, k = 2
输出:1 -> 3 -> 2 -> 5 -> 4
与leetCode:K 个一组翻转链表类似,只不过这里的k个元素是从后往前
思路
1. 先遍历一次链表,求链表长度,复杂度O(n)
2. n % k求得开始反转的链表结点,并将当前指针cur移动到此
3. 反转cur在内的连续k个结点,整个链表被分成三部分:链表1,链表2,链表3
4. 将链表2和链表1相连,链表2和链表3相连
5. 当前指针移动一个结点,开启下一个循环,空间复杂度为O(1)
综上算法复杂度:时间O(N),空间O(1)
代码
public static void main(String[] args) throws Exception {
ListNode five = new ListNode(5, null);
ListNode four = new ListNode(4, five);
ListNode three = new ListNode(3, four);