博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法题——链表中的节点每k个一组翻转
阅读量:2344 次
发布时间:2019-05-10

本文共 1172 字,大约阅读时间需要 3 分钟。

1. 本题知识点

链表

2. 题目描述

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

进阶:

  • 你可以设计一个只使用常数额外空间的算法来解决此问题吗?
  • 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]
输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5]

3. 解题思路

  1. 选取 K 个要翻转的结点,不够 K 个则直接返回头结点
  2. 将这 K 个结点交给翻转函数
  3. 递归以上过程

4. 代码

public class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if (head == null || head.next == null) {
return head; } ListNode tail = head; // 选取 K 个要翻转的结点,不够 K 个则直接返回头结点 for (int i = 0; i < k; i++) {
if (tail == null) {
return head; } tail = tail.next; } // 返回翻转后头结点 ListNode newHead = reverse(head, tail); // [) 左闭右开,head 变为链表尾部,tail 不变 head.next = reverseKGroup(tail, k); return newHead; } public ListNode reverse(ListNode head, ListNode tail) {
ListNode pre = null, next = null; while (head != tail) {
next = head.next; head.next = pre; pre = head; head = next; } return pre; }}

转载地址:http://scjvb.baihongyu.com/

你可能感兴趣的文章
弹性公网IP、私有IP、浮动IP、虚拟IP之间有何区别?
查看>>
如何通过扩展网卡绑定的弹性公网IP访问公网?
查看>>
【云图说】第119期 华为云VPC终端节点:助您高速上云,跨VPC通信
查看>>
2021金三银四最新高频java面试真题合集,啃透这9个模块,面试无压力!
查看>>
作为一个老程序员,给零基础学java的初学者一些建议:常见的误区和解决方法
查看>>
10年大牛给Java初学者的学习路线建议,如何学习Java?
查看>>
为什么这么多人都学不会Java,找不到Java工作?还不是方式不对
查看>>
完全零基础,到底该怎样学习编程?
查看>>
学习Java到什么程度可以出去实习?
查看>>
24岁女生,转行自学Java还有出路吗?
查看>>
一周内被程序员疯转5.6W次,最终被大厂封杀!
查看>>
干货来袭!阿里内部Java面试必备软/硬实力+大厂面经全都有
查看>>
自学Java半年成功拿到offer,分享我的学习经验,这些坑千万别踩!
查看>>
八年Java开发的学习经历自述,希望新人少走弯路!
查看>>
不知道怎么学习Java,这些方法助你成为Offer收割机!
查看>>
作为一个Java初学者应该注意些什么呢?
查看>>
27岁转行自学Java,真的太晚了吗?
查看>>
自学Java最起码要学到什么程度才能就业?
查看>>
零基础学Java需要做哪些准备?需要注意些什么呢?
查看>>
有了这份阿里大牛手写630页Java高级面试手册,offer稳了【建议收藏】
查看>>