【K 个一组翻转链表】

简介: 【K 个一组翻转链表】

正文


一、问题描述#


给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例:


给你这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5


说明:

你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。


二、Java代码#


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode h, cur, pre,start;
        h = head;
        cur = head;
        start=null;
        pre=null;
        boolean isFirst = true;
        while (null != cur && null != cur.next) {
            ListNode[] kNode = new ListNode[k];
            for (int i = k-1; i >=0 && null != cur; i--) {
                kNode[i] = cur;
                cur = cur.next;
            }
            if(kNode[0]!=null){
                ListNode temp=kNode[0].next;
                start=kNode[0];
                for (int i = 1; i < k && kNode[i] != null; i++) {
                    start.next=kNode[i];
                    start=kNode[i];
                }
                start.next=temp;
                if (isFirst) {
                    h = kNode[0];
                    isFirst = false;
                    pre=start;
                }else {
                    pre.next=kNode[0];
                    pre=start;
                }
            }
        }
        return h;
    }
}


相关文章
【 腾讯精选练习 50 题】01—翻转链表
【 腾讯精选练习 50 题】01—翻转链表
|
5月前
|
算法 Java
「LeetCode」25. K 个一组翻转链表
「LeetCode」25. K 个一组翻转链表
27 0
|
4月前
|
算法 Java Go
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
28 0
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
|
4月前
|
Java Go 人工智能
Java每日一练(20230502) BST公共祖先、随机分组、K个一组翻转链表
Java每日一练(20230502) BST公共祖先、随机分组、K个一组翻转链表
26 0
Java每日一练(20230502) BST公共祖先、随机分组、K个一组翻转链表
|
4月前
|
Python Java Go
Python每日一练(20230430) 移除元素、删除排序链表中的重复元素、搜索旋转排序数组II
Python每日一练(20230430) 移除元素、删除排序链表中的重复元素、搜索旋转排序数组II
47 0
Python每日一练(20230430) 移除元素、删除排序链表中的重复元素、搜索旋转排序数组II
|
4月前
leetcode-25:K 个一组翻转链表
leetcode-25:K 个一组翻转链表
16 0
LeetCode刷题Day04——链表(设计单/双链表、移除、翻转、交换链表节点)
迭代法:首先创建一个临时的节点p用于遍历链表,其开始可以指向头节点,也可以让其next节点指向头节点(如果p指向头节点则while循环的判断条件是p!=null,反之则是p.next!=null),随后p不断地向后移动,在这个过程中进行要求的操作。如果结果要返回头指针,可以实现创建一个节点让其next指向头指针。 如果是要删除元素,那么需要拥有前一个节点的指针,让其指向要删除的元素的下一个元素,所以此时则不能让p指向头节点,而应该是让next去指向,即判断的是下一个元素的值,这样才能够实现删除。 如果是要翻转链表,那么需要不断改变指针的方向,即让next等于之前的元素,所以需要一个变量prev
|
5月前
|
Java
25. K 个一组翻转链表 --力扣 --JAVA
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
24 0
|
6月前
链表中的节点每k个一组翻转
链表中的节点每k个一组翻转
24 0
|
7月前
|
存储 算法 前端开发
前端算法-翻转链表
前端算法-翻转链表