题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
using System; using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } } */ class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ public ListNode reverseKGroup (ListNode head, int k) { int groups = GetLongth(head) / k; if (groups == 0 || k == 1) return head; ListNode pre = null; ListNode cur = head; ListNode nex; ListNode pf = null;//上一组的第一个 ListNode pl;//这一组的第一个 ListNode newHead = null; for (int i = 0; i < groups; i++) { pl = cur; pre = cur; cur = cur.next; for (int j = 1; j < k; j++) { nex = cur.next; cur.next = pre; pre = cur; cur = nex; } pl.next = cur; if (pf != null) pf.next = pre; pf = pl; newHead = newHead == null ? pre : newHead; } return newHead; } public int GetLongth(ListNode head) { int length = 0; while (head != null) { head = head.next; length++; } return length; } }