1. 题目
2. 解法
思路
这段代码的思路是:
- 使用一个虚拟节点 dummy 来简化代码,让它指向头节点。
- 使用三个指针 prev,curr 和 next 来遍历链表,其中 prev 指向当前反转的组的前一个节点,curr 指向当前反转的组的第一个节点,next 指向当前反转的组的下一个节点。
- 首先计算链表的长度 len,然后根据 len 和 k 判断是否需要反转当前的组。
- 如果需要反转,就使用头插法将 curr 和 next 之间的节点插入到 prev 和 curr 之间,重复 k - 1 次。
- 然后将 prev 和 curr 移动到下一组的位置,更新 len。
- 最后返回 dummy.next 作为新的头节点。
代码逻辑
具体实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | public class Solution { public ListNode reverseKGroup(ListNode head, int k) { // base case if (head == null || k == 1 ) return head; // dummy node to simplify the code ListNode dummy = new ListNode( 0 ); dummy.next = head; // pointers ListNode prev = dummy; ListNode curr = head; ListNode next = null ; // count the length of the list int len = 0 ; while (curr != null ) { len++; curr = curr.next; } // reset curr to head curr = head; // loop through the list and reverse every k nodes while (len >= k) { // reverse k nodes for ( int i = 1 ; i < k; i++) { next = curr.next; curr.next = next.next; next.next = prev.next; prev.next = next; } // move prev and curr to the next group prev = curr; curr = curr.next; // update len len -= k; } // return the new head return dummy.next; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)