问题描述
链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
public static LinkNode reverseK(LinkNode node, int k){
if(null == node || k <= 0){
return node;
}
LinkNode fast = node;
LinkNode pre = null;
LinkNode root = null;
while(null != fast){
int t = k;
LinkNode slow = fast;
while(t-- > 1){
if(null == fast.next){
break;
}
fast = fast.next;
}
if(null == root){
root = fast;
}
LinkNode tmp = fast.next;
reverse(slow, fast);
slow.next = tmp;
if(null != pre) {
pre.next = fast;
}
pre = slow;
fast = tmp;
}
return root;
}
public static void reverse(LinkNode node, LinkNode endNode){
if(null == node){
return;
}
LinkNode pre = null;
while(null != node){
LinkNode next = node.next;
node.next = pre;
pre = node;
if(null == next || node == endNode){
break;
}
node = next;
}
return;
}