Java 求解K 个一组翻转链表

Posted 南淮北安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解K 个一组翻转链表相关的知识,希望对你有一定的参考价值。

一、题目

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

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

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

二、题解

/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        // 翻转,删除,都要设置虚拟头结点
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        //记录每次操作的起始节点
        ListNode beginNode = dummyHead;
        //记录每次操作的结束节点
        ListNode endNode = dummyHead;
        ListNode nextNode, preNode;
        while (endNode.next != null) {
            //判断后续的节点是否还有k个
            for (int i = 0; i < k && endNode != null; i++) {
                endNode = endNode.next;
            }
            if (endNode == null) {
                break;
            }
            preNode = beginNode.next;
            nextNode = endNode.next;
            endNode.next = null;
            //开始翻转这一组
            beginNode.next = reverse(preNode);
            preNode.next = nextNode;
            beginNode = preNode;
            endNode = preNode;
        }
        return dummyHead.next;
    }

    public ListNode reverse(ListNode head) {
        ListNode curNode = head;
        ListNode tempNode, preNode=null;
        while (curNode != null) {
            tempNode = curNode.next;
            curNode.next = preNode;
            preNode = curNode;
            curNode = tempNode;
        }
        return preNode;
    }
}

以上是关于Java 求解K 个一组翻转链表的主要内容,如果未能解决你的问题,请参考以下文章

k个一组翻转链表(java实现)

LeetCode Java刷题笔记—25. K 个一组翻转链表

链表题--01----K 个一组翻转链表

LeetCode:K个一组翻转链表(链表问题)

(Java) LeetCode 25. Reverse Nodes in k-Group —— k个一组翻转链表

链表--K个一组反转链表(leetcode 25