Leetcode 25 K 个一组翻转链表
代码分析
使用next保留现场
while(cur!=null)
{
next=cur.next;
if(count==K)
{
//逆置
count=0;
}
cur=next;
count++;
}变形之后的链表逆置
分析一下逆置中需要什么
1,肯定需要一个逆置的起点
2,逆置之前的节点
3,逆置之后的节点 next
2,3两个变量,我们分辨将他们命名为left,right
right就是我们的next,left最开始是null,一次结束之后,我们将当前的节点设置为left即可
如何解决1呢
start=left==null?head:pre.next;
逆置的话,从start的下一个节点开始
代码实现
public static ListNode reverseKGroup(ListNode head,int K)
{
ListNode next=null;
ListNode cur=head;
ListNode start=head;
ListNode left=null;
int count=1;
while(cur!=null)
{
next=cur.next;
if(count==K)
{
start=left==null?head:left.next;
head=left==null?cur:head;
region(left,next,start);
left=start;
count=0;
}
count++;
cur=next;
}
return head;
}
public static void region(ListNode left,ListNode right,ListNode start)
{
ListNode next=null;
ListNode pre=start;
ListNode cur=start.next;
while(cur!=right)
{
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
if(left!=null)
{
left.next=pre;
}
start.next=right;
}完成情况
1 次