题目
思路
- 思路一:首先要计算链表的长度方便判断是否有足够长度反转,第二步使用头插法反转链表,需要注意的是在每次反转一段链表后,需要重置prev和head节点。
代码
K 个一组翻转链表public ListNode reverseKGroup(ListNode head, int k) {if (head == null || k == 1) return head;ListNode dummy = new ListNode(0);dummy.next = head;int len = 0;while(head != null) {len++;head = head.next;}head = dummy.next;ListNode prev = dummy;for(int j = len; len - k >= 0; len -= k) {//使用头插法插入节点for (int i = k; i > 1; i--) {ListNode next = head.next;head.next = next.next;next.next = prev.next;prev.next = next;}//重置节点prev = head;head = head.next;}return dummy.next;}
