package List;
public class Node<V> {
V value;
Node<V> next;
public Node(V value){
this.value = value;
}
public static void printList(Node head){
Node node = head;
while(node != null){
System.out.print(node.value + " ");
node = node.next;
}
System.out.println();
}
}
package List;
public class EveryKReverse {
/**
* 单链表每K个节点反转
*/
public static Node everyKReverse(Node head, int k){
if(head == null || head.next == null || k <= 1){
return head;
}
Node newHead = null, newEnd = null;
while(head != null){
Node newHeadTmp = null, newEndTmp = null;
int count = k;
while(head != null && count > 0){
if(count == k){
newEndTmp = head;
}
Node tmp = newHeadTmp;
newHeadTmp = head;
head = head.next;
newHeadTmp.next = tmp;
count--;
}
if(newHead == null){
newHead = newHeadTmp;
}else{
newEnd.next = newHeadTmp;
}
newEnd = newEndTmp;
}
return newHead;
}
public static void main(String[] args){
Node head = new Node(1);
Node head1 = new Node(2);
Node head2 = new Node(3);
Node head3 = new Node(5);
head.next = head1;
head1.next = head2;
head2.next = head3;
Node.printList(head);
Node newHead = everyKReverse(head, 3);
Node.printList(newHead);
}
}