25. K 个一组反转链表
Problem: 25. K 个一组翻转链表
思路
本题的主要思想和反转链表相同,但是多了很多细节处理。
首先,最后剩余的节点无需反转(起初我写成剩余节点也反转的了)。
然后,由于是一组一组的反转链表,不要忘了在每一组反转完链表后,把上一组的尾节点连接到这一组链表的头节点上。
以及,最后返回的头节点也不再是起初的头节点,因此我们可以用一个哑节点来辅助,最后返回哑节点的下一个节点即可。
Code
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
|
class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode dummy = new ListNode(); ListNode lastq = dummy; ListNode p = head; ListNode ans = p; int n = 0; while (p != null) { p = p.next; n++; } p = head; for (int j = 0; j < (n / k); j++) { ListNode q = p; ListNode h = p; p = p.next; for (int i = 0; i < k - 1; i++) { q.next = p.next; p.next = h; h = p; p = q.next; } lastq.next = h; lastq = q; } return dummy.next; } }
|