Java将给出的链表中的节点每k个一组翻转,返回翻转后的链表
题目描述
将给出的链表中的节点每k个一组翻转,返回翻转后的链表
如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
只允许使用常数级的空间
例如:
给定的链表是1->2->3->4->5
对于 k = 2, 你应该返回 2->1->4->3->5
对于 k = 3, y你应该返回 3->2->1->4->5
public ListNode reverseKGroup (ListNode head, int k) {
if(head == null || k == 1){
return head;
}
int len = 0;
ListNode curNode = head;
while(curNode!=null){
len++;
curNode = curNode.next;
}
//自定义一个头指针节点
ListNode node = new ListNode(-1);
ListNode pre = node;
pre.next = head;
ListNode curNode2 = head;
ListNode tempNode = null;
for(int i=0;i<len/k;i++){
//头插法 反转每一段节点 相当于单链表反转
for(int j=1;j<k;j++){
tempNode = curNode2.next;
curNode2.next = tempNode.next;
tempNode.next = pre.next;
pre.next = tempNode;
}
//每段链表反转后 重新定位pre和curNode2 假设k=2 链表123
//此时由于第一段链表已经反转 123变成了213 所以pre=1相当于头指针
//curNode2 = 3
pre = curNode2;
curNode2 = curNode2.next;
}
return node.next;
}