链表 1 2 3 4 5
输入 K=2 ,要反转成 2 1 4 3 5
public Node reverse(Node head,int k) {
if(head == null || k<2) return head;
Node pre = null; //pre开始是K个节点中第一个节点的前一个节点
Node start = null;//start是K个节点的第一个节点
Node cur = head;
Node next = null;
int count = 1;
while(cur!=null) {
next = cur.next;
if(count == k) {
start = pre == null ?head:pre.next;
head= pre == null ?cur:head;
resign(pre,start,cur,next);
pre = start;
count = 0;
}
count ++;
cur = next;
}
return head;
}
public void resign(Node left,Node start,Node end,Node right) {
Node pre = start;
Node cur = start.next;
Node next = null;
while(cur!=right) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
if(left!=null) {
left.next = end;
}
start.next = right;
}