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) {
//记录头结点,因为头结点要指向第一组k个节点的尾节点 ListNode start
=head; ListNode end=getEndNode(start,k);
//如果第一组都不满足k个
if(end==null){ return head; }
//头结点指向第一组链表的尾节点 head
=end;
//反转 reverse(start,end);
//记录第一组的开始节点,因为在以后的每一组反转之前都要先搜索到该组的起始节点和终止节点,即需要记录第一组节点的起始节点第二组开始时的起始节点需要重寻 ListNode lastnode
=start; while(lastnode!=null){
//新的起始节点变为上一次的end节点的下一个节点 start
=lastnode.next; end=getEndNode(start,k); if(end==null){ return head; } reverse(start,end); lastnode.next=end; lastnode=start; } return head; }
//取以k为一组的链表的结尾
public static ListNode getEndNode(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 cur=start; ListNode next=null; while(cur!=null){ next=cur.next; cur.next=pre; pre=cur; cur=next; } start.next=end; } }
复制代码

 

posted @   cojames  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示