题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ public ListNode reverseKGroup (ListNode head, int k) { int i = 1; boolean setHead = false; ListNode newHead = head, oldHead = head, curNode = null, lastTail = null, tempNode = null; if(head == null || head.next == null || k ==1){//排除特殊情况 图个轻松哈哈 不完美 return head; } while(head != null){ if(i /k > 0){ curNode = head.next;//cut list and save head.next = null; tempNode = revert(oldHead);//revert and connect oldHead.next = curNode;// first time,only connect next head to tail if(lastTail != null){ lastTail.next = tempNode;//other time connect head to pre tail in addition } if(!setHead){//record head of the new listnode to return newHead = tempNode; setHead = true; } lastTail = oldHead; head = curNode; oldHead = curNode; i = 1; } if(head != null){ head = head.next; i++; } } return newHead; } private ListNode revert(ListNode eNode){ ListNode pre = null, next = null; while(eNode != null){ next = eNode.next; eNode.next = pre; pre = eNode; eNode = next; } return pre; } }