#yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转

1.简述:

描述

将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。

数据范围: #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转 , #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转 ,链表中每个元素都满足 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转要求空间复杂度 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转,时间复杂度 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转

例如:

给定的链表是 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转

对于 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转 , 你应该返回 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转

对于 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转 , 你应该返回 #yyds干货盘点# 面试必刷TOP101:链表中的节点每k个一组翻转

示例1

输入:

{1,2,3,4,5},2

返回值:

{2,1,4,3,5}

示例2

输入:

{},1

返回值:

{}

2.代码实现:

import java.util.*;
public class Solution {
public ListNode reverseKGroup (ListNode head, int k) {
//找到每次翻转的尾部
ListNode tail = head;
//遍历k次到尾部
for(int i = 0; i < k; i++){
//如果不足k到了链表尾,直接返回,不翻转
if(tail == null)
return head;
tail = tail.next;
}
//翻转时需要的前序和当前节点
ListNode pre = null;
ListNode cur = head;
//在到达当前段尾节点前
while(cur != tail){
//翻转
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
//当前尾指向下一段要翻转的链表
head.next = reverseKGroup(tail, k);
return pre;
}
}
发表评论

相关文章