深圳集团网站建设服务h5是啥
2026/1/10 20:00:43 网站建设 项目流程
深圳集团网站建设服务,h5是啥,个人网站备案要什么,优秀网站开发商思路#xff1a;1.链表分为已翻转部分 待翻转部分 未翻转部分。2.每次翻转前#xff0c;要确定翻转链表的范围#xff0c;通过k次循环来确定。3.需要记录翻转链表的前驱和后继#xff0c;方便翻转完成后把已翻转和未翻转的部分连接起来。4.初始时需要两个变量pre和end1.链表分为已翻转部分 待翻转部分 未翻转部分。2.每次翻转前要确定翻转链表的范围通过k次循环来确定。3.需要记录翻转链表的前驱和后继方便翻转完成后把已翻转和未翻转的部分连接起来。4.初始时需要两个变量pre和endpre表示待翻转链表的前驱end表示待翻转链表的末尾。5.经过k次循环end到达末尾记录待翻转链表的后继next end.next。6.翻转链表然后将三部分链表连接起来然后重置pre和end指针然后进入下一次循环。7.特殊情况当翻转部分的长度不足k时在定位end完成后end null已经到达末尾说明题目已经完成直接跳出循环return即可。复杂度分析1.时间复杂度O(n*K)最好的情况为O(n)最差的情况为O(n^2)。2.空间复杂度O(1)。除了几个必须的节点指针外没有占用额外空间。附代码class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode sentinel new ListNode(0); //初始化哨兵节点 sentinel.next head; ListNode pre sentinel; //pre表示当前待翻转区间的前一个节点 ListNode end sentinel; //end表示当前待翻转区间的最后一个节点 while(end.next ! null){ for(int i 0;i k end ! null;i){ end end.next; //每k个节点一组 } if(end null){ break; //剩余节点不足k个直接退出 } ListNode start pre.next; //start表示当前组的第一个节点 ListNode next end.next; //next表示下一组的第一个节点 end.next null; //断开当前组与下一组的连接 //翻转当前组 pre.next reverse(start); //pre连接到翻转后的新头 start.next next; //当前组的第一个节点连接下一组的第一个节点即翻转后的尾连接到下一组的头 pre start; //pre移动到当前组的尾部 end pre; //end同步到pre位置 } return sentinel.next; } //翻转链表 private ListNode reverse(ListNode head){ ListNode pre null; ListNode cur head; while(cur ! null){ ListNode tmp cur.next; cur.next pre; pre cur; cur tmp; } return pre; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询