当前位置:网站首页>K个结点的组内逆序调整

K个结点的组内逆序调整

2022-08-09 12:01:00 爱敲代码的Harrison

题目

力扣链接:K个结点的组内逆序调整

在这里插入图片描述

代码

package com.harrison.class06;

/** * @author Harrison * @create 2022-06-19-15:50 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */
public class Code07_ReverseNodesInKGroup {
    
    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;
        }
    }

    public ListNode reverseKGroup(ListNode head, int k) {
    
        ListNode start=head;
        ListNode end=getKGroupEnd(start,k);
        if(end==null){
    
            return head;
        }
        // 第一组凑齐了
        head=end;
        reverse(start,end);
        ListNode lastEnd=start;
        while(lastEnd.next!=null){
    
            start=lastEnd.next;
            end=getKGroupEnd(start,k);
            if(end==null){
    
                return head;
            }
            reverse(start,end);
            lastEnd.next=end;
            lastEnd=start;
        }
        return head;
    }

    public static ListNode getKGroupEnd(ListNode start,int k){
    
        while(--k!=0 && start!=null){
    
            start=start.next;
        }
        return start;
    }

    public static void reverse(ListNode start,ListNode end){
    
        end=end.next;
        ListNode pre=null;
        ListNode next=null;
        ListNode cur=start;
        while(cur!=end){
    
            next=cur.next;
            cur.next=pre;
            pre=cur;
            cur=next;
        }
        start.next=end;
    }
}

原网站

版权声明
本文为[爱敲代码的Harrison]所创,转载请带上原文链接,感谢
https://harrison-lhs.blog.csdn.net/article/details/125358781