一、题目
1、审题
2、分析
给一个链表,与一个数字 k,每次翻转链表中的 k 个结点,若剩下的结点个数不满 k 个,则不翻转。
二、解答
1、思路:
a、计算出总结点个数 total, 则需要翻转k个结点的总躺数为 total / k;
b、循环实现翻转 k 个结点;其中翻转即为将后一个结点依次插入此次翻转的链表头;
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode dummy = new ListNode(0); dummy.next = head; int total = 0; // 总结点数 while(head != null) { total++; head = head.next; } head = dummy.next; ListNode pre = dummy; ListNode next; int times = 1; while(times++ <= total / k) { // 总共翻转 times 次 k 个结点 int i = 1; // 翻转 k 个结点, 只要head 前插入后边 k -1 个 while(i++ < k) { next = head.next; head.next = next.next; // 删除 next.next = pre.next; // 插入 pre.next = next; } pre = head; head = head.next; } return dummy.next; } }