LeetCode--025--k个一组翻转链表(java)
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
说明 :
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode reverseKGroup(ListNode head, int k) { 11 if(head == null || head.next == null) return head; 12 int count = 0; 13 ListNode cur = head; 14 while(cur != null && count != k){ 15 cur = cur.next; 16 count++; 17 } 18 if(count == k){ 19 cur = reverseKGroup(cur,k);//cur 是上一次反转后的头结点 20 while(count-- >0){//基本的反转语句要掌握 21 ListNode temp = head.next; 22 head.next = cur; 23 cur = head; 24 head = temp; 25 } 26 head = cur; 27 } 28 return head; 29 } 30 }
2019-04-20 17:50:52

更多精彩