一、题目内容

image.png

二、题解

解法1:

思路

新建dum节点,用于保存头结点
新建pre和end,用来保存没阶段旋转时的前后节点
注意start节点在反转后,变成了链表的最后一个节点

代码

  1. public ListNode reverseKGroup(ListNode head, int k) {
  2. ListNode dum = new ListNode(-1);
  3. dum.next = head;
  4. ListNode pre = dum, end = dum;
  5. while (end.next != null) {
  6. for (int i = 0; i < k && end != null; i++) {
  7. end = end.next;
  8. }
  9. if (end == null) {
  10. break;
  11. }
  12. ListNode nextStart = end.next;
  13. ListNode start = pre.next;
  14. end.next = null;
  15. pre.next = reverseList(start);
  16. start.next = nextStart;
  17. pre = start;
  18. end = start;
  19. }
  20. return dum.next;
  21. }
  22. private ListNode reverseList(ListNode head) {
  23. ListNode pre = null;
  24. ListNode cur = head;
  25. while (cur != null) {
  26. ListNode next = cur.next;
  27. cur.next = pre;
  28. pre = cur;
  29. cur = next;
  30. }
  31. return pre;
  32. }