一 ,问题描述
1,题目的意思是将链表进行部分逆置,逆置的部分跟K值有关。
2,如上所示,
对于 1->2->3->4->5
当k=1时,输出:1->2->3->4->5
当k=2时 , 输出: 2->1->4->3->5
当k=3时 ,输出: 3->2->1->4->5 其中 后面 4 5没变是因为做完一次 3 2 1 剩下的 4 5 已经比k小了,所以保持原来的顺序
3,解题思路;
首先分析链表的长度是否为k的倍数,
如果是的话,则 先每次找到k个节点,然后把这个k个节点放入新建的数组中,数组长度为k,把k个节点里的值插入到反着的数组中。然后在把正的数组的值复制到这k个节点。这样就完成了k个节点的反转。
如果不是的话,则先找到k个节点,如果有k个节点的话,则然后把这个k个节点放入新建的数组中,数组长度为k,把k个节点里的值插入到反着的数组中。然后在把正的数组的值复制到这k个节点。这样就完成了k个节点的反转;如果没有k个节点的话,那意味着到了末尾几个节点了,所以不处理它们。
二,AC了的程序(JAVA实现的)
import java.util.Scanner;
class ListNode{
int val;
ListNode next;
ListNode(int x)
{
val=x;
}
}
public class Test2{
public static ListNode reverseKGroup(ListNode head, int k)
{
ListNode p1=head;
ListNode p2=head;
ListNode t;
ListNode t2;
ListNode t3;
int len=0;
if(head==null)
{
return