JAVA程序设计:K 个一组翻转链表(LeetCode:25)

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明 :

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路:直接递归即可

package org.yuan.myproject;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}
class Solution {
   public ListNode reverseKGroup(ListNode head, int k) {
	   int count=0;
	   ListNode temp=head;
	   while(temp!=null)
	   {
		   count++;
		   temp=temp.next;
		   if(count==k-1)
			   break;
	   }
	   if(temp==null)
		   return head;
	   int num=k;
	   temp=temp.next;
	   ListNode headt=head;
	   ListNode pre=null;
	   while(num!=0)
	   {
		   ListNode next=head.next;
		   head.next=pre;
		   pre=head;
		   head=next;
		   num--;
	   }
	   headt.next=reverseKGroup(temp,k);
	   return pre;
   }
}
   

 

你可能感兴趣的:(JAVA程序设计:K 个一组翻转链表(LeetCode:25))