首页 > 编程语言 >leetcode 25 Reverse Nodes in k-Group

leetcode 25 Reverse Nodes in k-Group

时间:2022-10-24 22:38:51浏览次数:55  
标签:25 ListNode tem next middle Group Nodes null first


给一个链表,每k个节点一组进行反转,输出反转后的链表

hard难度,但突破点很好找,具体解体思路,看下面代码中每行注释

public class LC25 {

public static void main(String[] args) {
ListNode listNode = new ListNode(1, new ListNode(2,
new ListNode(3, new ListNode(4, new ListNode(5, null)))));
ListNode result = new LC25().reverseKGroup(listNode, 2);
while (result!=null){
System.out.print(result);
result = result.next;
}
}

/**
* k个元素一组做划分
* 每组进行反转(需要记录每组的头[达到分组条件时需要用到这个头进行循环当前组])
* 反转后的尾与反转后的头连接(需要记录上一组反转后的尾[也就是未反转时的头])
* @param head
* @param k
* @return
*/
public ListNode reverseKGroup(ListNode head, int k) {
if (k == 1 || head == null || head.next == null) {
return head;
}
//迭代数量
int n = 0;
//记录每一段的第一个
ListNode first = head;
//记录上一段第一个
ListNode lastFirst = null;
//临时循环变量,分组用[达到分组条件时,为当前组的最后一个]
ListNode tem = first;
//记录第一组的尾[反转后整个链表的头]
ListNode tail = null;
while (tem != null) {
n++;
//满足分组条件
if (n == k) {
//达到k,重置
n = 0;
ListNode middle = first.next;
//上一段头,指向新一段尾
if(lastFirst != null) {
lastFirst.next = tem;
}
lastFirst = first;
//指针变换,first middle last依次后移
while (middle != null && middle != tem) {
ListNode last = middle.next;
middle.next = first;
first = middle;
middle = last;
}
if(tail == null){
//记录第一组的尾
tail = tem;
}
tem = tem.next;
//当前组最后两元素变换指针
middle.next = first;
first = tem;
continue;
}
tem = tem.next;
}
//最后一组未满足k个元素时,元素做关联
lastFirst.next = first;
return tail;
}

public static class ListNode {
int val;
ListNode next;

ListNode() {
}

ListNode(int val) {
this.val = val;
}

ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}

@Override
public String toString() {
return val+" ";
}
}

}

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星

leetcode 25 Reverse Nodes in k-Group_leetcode25


标签:25,ListNode,tem,next,middle,Group,Nodes,null,first
From: https://blog.51cto.com/u_7841967/5791464

相关文章

  • 牛客SQL-牛客题:256-288(不干了)
    256.写一个sql查询,积分表里面出现三次以及三次以上的积分。若有多个符合条件的number,则按number升序排序输出SELECT`number`FROMgradeGROUPBY`number`HAVINGCOUN......
  • POJ 1825/2279(Young/Mr. Young's Picture Permutations-杨氏矩阵和钩子公式)
    给出一个n行的矩阵,每一行有a[i]个数,总共有sum个数,要求每一个位置的数必须比上面的数和左面的数大,求总方案数.杨氏矩阵又叫杨氏图表,它是这样一个矩阵,满足条件:(1)如果格子......
  • 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique
     2016-10-0923:14:43.177DEBUG[restartedMain][org.springframework.core.type.classreading.AnnotationAttributesReadingVisitor]Failedtoclass-loadtypewhiler......
  • .net core 5 k8s win32 error 258问题记录
    同文搜索到结论:https://www.cnblogs.com/xwgli/p/13800550.html今日在K8S中测试高并发,压测到1万+个TCP连接,内部每40S定时查询一次接口,采用同步轮询每秒大约100个请求一次,......
  • 圆刚C725B金星标清采集卡
    C725标清采集卡是一张支持AV端子、S端子以及立体声输入的PCIe卡,可将PAL、NTSC和SECAM等模拟格式影像数字化、采集并另存为无压缩的AVI格式档案。C725标清采集卡随附的软件......
  • Go 语言 errgroup 库的使用方式和实现原理
    大家好,我是frank。欢迎大家点击标题下方蓝色文字「Golang语言开发栈」关注公众号。设为星标,第一时间接收推送文章。文末扫码,加群一起学Golang语言。01 介绍在Go......
  • Are They Equal (25)
    题目描述Ifamachinecansaveonly3significantdigits,thefloatnumbers12300and12358.9areconsideredequalsincetheyarebothsavedas0.123*105with......
  • Prime Factors (25)
    题目描述GivenanypositiveintegerN,youaresupposedtofindallofitsprimefactors,andwritethemintheformatN=p1^k1*p2^k2*...*pm^km.输入描述:......
  • 学期2022-2023-1 学号20221425 《计算机基础与程序设计》第八周学习总结
    学期(如2022-2023-1)学号(如:20221425)《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这......
  • 0025:2011年NOIp普及组真题——瑞士轮题解
    题目链接:https://www.luogu.com.cn/problem/P1309如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分;这是因为每次比完赛会产生两个......