K个一组翻转链表
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
说明 :
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
1 • public class Solution{ 2 public ListNode reverseKGroup(ListNode head,int k){ 3 if(head==null || head.next==null || k<2) return head; 4 ListNode dummy=new ListNode(0); 5 dummy.next=head; 6 ListNode pre=dummy,cur=head,temp; 7 int len=0; 8 while(head!=null){ 9 len++; 10 head=head.next; 11 } 12 for(int i=0;i<len/k;i++){ 13 for(int j=1;j<k;j++){ 14 temp=cur.next; 15 cur.next=temp.next; 16 temp.next=pre.next; 17 pre.next=temp; 18 } 19 pre=cur; 20 cur=cur.next; 21 } 22 return dummy.next; 23 } 24 }