6.<tag-链表和反转链表>lt.25- K 个一组翻转链表

lt.25- 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) {
        //链表的反转方法:
        /**
            1. 修改了结点: 遍历链表的值放入list, 取出重新连接;
            2. 不修改链表: 遍历链表, 头插法;
            3. 不修改链表: 递归(还不会呢)
         */

        // post遍历链表, 到达链表尾部就结束;
        // 对post遍历次数进行计数 count, count==k时, 进入反转流程;
        // pre记录每个反转区间的前一个结点;
        // 对pre和post之间的链表结点进行反转; 

        ListNode dummy = new ListNode(-1);
        dummy.next = head;

        ListNode pre = dummy;
        ListNode tail = dummy;


        while(true){
            int count = 0;
            while(tail != null && count != k){
                ++count;
                tail = tail.next;
            }

            if(tail == null)break;

            ListNode head1 = pre.next;

            
            while(pre.next != tail){
                ListNode cur = pre.next;
                pre.next = cur.next;
                cur.next = tail.next;
                tail.next = cur;
                
            }
            pre = head1;
            tail = head1;
        }

        return dummy.next;
    }

}
posted @   青松城  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示