LeetCode25 K个一组翻转链表(Java实现)
题目描述:
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
复制代码
代码:
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode pre = null;
ListNode cur = head; // 当前节点
ListNode next = head; // 后继节点
ListNode sum = head; //遍历总共的节点
int count = 0;
int i = 0;
while(sum != null){
sum=sum.next;
count++;
}
if(count < k) { //小于k,直接返回
return head;
} else {
while(i < k && cur != null) { //对每一组开始翻转
next = cur.next;
cur.next=pre;
pre=cur;
cur=next;
i++;
}
if(next != null) { //递归
head.next = reverseKGroup(next,k); //前继节点的next指向下一个反转后的节点
}
return pre;
}
}
}
复制代码