public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
ListNode newHead = new ListNode(-1);
newHead.next = head;
if(head==null){
System.out.println("{}");
return null;
}else{
changeLink(newHead,k);
return newHead.next;
}
}
public void changeLink(ListNode newHead, int k){
//从头开始遍历链表,使用双指针,间隔为k,当两个指针所指结点均不为空时,开始交换
ListNode temp1=newHead;
ListNode temp2=newHead;
//首先将temp1移动到第k个结点。
int index = 0;
while (true){
while (index<k && temp1!=null){
temp1 = temp1.next;
index++;
}
if(temp1!=null&&index==k){
//这时开始交换temp1和temp2.next及之间的结点
//temp1作为标志位,原地不动,
//temp2从head向前挪,每挪一次,将新结点插入到头结点之后
ListNode head = temp2;
temp2 = temp2.next;
ListNode node1;
ListNode node2;
while (head.next!=temp1){
//将temp2.next与head.next交换
node1 = head.next;
node2 = temp2.next.next;
head.next = temp2.next;
temp2.next = node2;
head.next.next = node1;
}
}else {
break;
}
//第一组交换结束,下一组开始,此时应把index置零,将temp1与temp2移到下一组的前一个结点。
temp1 = temp2;
index = 0;
}
}
}
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
ListNode newHead = new ListNode(-1);
newHead.next = head;
if(head==null){
System.out.println("{}");
return null;
}else{
changeLink(newHead,k);
return newHead.next;
}
}
public void changeLink(ListNode newHead, int k){
//从头开始遍历链表,使用双指针,间隔为k,当两个指针所指结点均不为空时,开始交换
ListNode temp1=newHead;
ListNode temp2=newHead;
//首先将temp1移动到第k个结点。
int index = 0;
while (true){
while (index<k && temp1!=null){
temp1 = temp1.next;
index++;
}
if(temp1!=null&&index==k){
//这时开始交换temp1和temp2.next及之间的结点
//temp1作为标志位,原地不动,
//temp2从head向前挪,每挪一次,将新结点插入到头结点之后
ListNode head = temp2;
temp2 = temp2.next;
ListNode node1;
ListNode node2;
while (head.next!=temp1){
//将temp2.next与head.next交换
node1 = head.next;
node2 = temp2.next.next;
head.next = temp2.next;
temp2.next = node2;
head.next.next = node1;
}
}else {
break;
}
//第一组交换结束,下一组开始,此时应把index置零,将temp1与temp2移到下一组的前一个结点。
temp1 = temp2;
index = 0;
}
}
}