25.k个一组反转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
- 题目:25. K 个一组翻转链表 - 力扣(LeetCode) (leetcode-cn.com)
-
思路:第一步,实现迭代反转a链表起始节点到b节点区间的反转;第二步,实现满k个为一组链表,进行反转,节点可以不断地前进,当前进到k个节点时,停下,实现第一步的反转,反转后将返回反转后链表的头节点,进行不断地前进,直到最后的节点个数不满足k个为止。
class Solution { public ListNode reverseKGroup(ListNode head, int k) { if(head==null){ return null; } ListNode a,b; a=head; b=head; for(int i=0;i<k;i++){ if(b==null) return head; b = b.next; } ListNode res = reverse(a,b); a.next = reverseKGroup(b,k); return res; } ListNode reverse(ListNode a,ListNode b){ ListNode cur,pre,ntx; pre = null; cur = a; ntx = a; while(cur!=b){ ntx = cur.next; cur.next = pre; pre = cur; cur = ntx; } return pre; } }