博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Reverse Nodes in k-Group@LeetCode
阅读量:7067 次
发布时间:2019-06-28

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

翻转链表的升级版,由于在以前阿里的面试中遇到过,所以特别在意,这次写题解之前又重新把原来通过的代码优化了一下。

其实这题很简单,知道了翻转链表的通用写法之后,解这一题其实就是循环翻转的过程(知道最后一个group长度不足)。

先介绍下翻转链表的写法:

1. 首先设置一个前置节点,将前置节点的next设置为头节点,以头节点为当前节点,开始循环
2. 将当前节点的next赋给一个临时节点,然后将当前节点的next指向前置节点,随后依次位移前置节点指针和当前节点指针:前置节点指针指向当前节点,当前节点指针指向临时节点,这样就完成了一次循环
3. 当前置节点指针指向尾节点时,循环结束

有个这个翻转函数之后,只要对链表进行循环,当计数长度不k时,指针继续前进;当计数长度到达k时,将头尾节点作为参数传入翻转函数进行翻转,然后重新拼接到原链表中。直至到达链表末尾。

实现代码:

javapublic class Solution {    public ListNode reverseKGroup(ListNode head, int k) {        if (k == 1 || head == null || head.next == null)            return head;        ListNode first = head, last = head;        ListNode preHead = new ListNode(-1);        preHead.next = head;        ListNode preGroup = preHead, nextGroup = preHead;        int count = 1;        while (last != null) {            if (count == k) {                nextGroup = last.next;                reverseList(first, last);                preGroup.next = last;                preGroup = first;                first.next = nextGroup;                first = nextGroup;                last = nextGroup;                count = 1;                continue;            }            last = last.next;            count++;        }        return preHead.next;    }    private void reverseList(ListNode head, ListNode tail) {        ListNode pre = new ListNode(-1), node = head;        pre.next = head;        while (pre != tail) {            ListNode temp = node.next;            node.next = pre;            pre = node;            node = temp;        }    }}

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

你可能感兴趣的文章
maven里如何根据不同的environment打包
查看>>
linux tar命令疑难解析(经验总结)
查看>>
HBuilder复制PHP项目后,【转到定位】功能失效
查看>>
Web.config文件中节点的配置数值读取的2种方法,哪种更快?
查看>>
PHP中include和require的区别详解
查看>>
动态织入的AOP实现
查看>>
spring 配置扫描多个包
查看>>
Symbian开发入门
查看>>
学习笔记:Oracle的trace文件可见性
查看>>
北京某公司.NET面试题
查看>>
解决异常“SqlParameterCollection 只接受非空的 SqlParameter 类型对象。”
查看>>
PostgreSQL通过mysql_fdw访问MySQL数据库
查看>>
REST风格的原则
查看>>
Struts分页的一个实现
查看>>
[LintCode] Nuts & Bolts Problem 螺栓螺母问题
查看>>
53.2. group_concat() 列传行
查看>>
I.MX6 SHT20 Linux 驱动移植
查看>>
7.4. String
查看>>
使用PHP配置文件
查看>>
【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
查看>>