博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法】JAVA实现快慢指针法 单链表实现判断水仙花字符串
阅读量:6412 次
发布时间:2019-06-23

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

hot3.png

package data_structure;/** * author: cdfuhuichao * date: 2019/3/5 18:11 * description: 使用单链表实现 判断水仙花字符串 */public class SXHString {    public static void main(String[] args) {        System.out.println(check("上海自来水来自海上"));        System.out.println(check("上海自来来自海上"));        System.out.println(check("上"));    }    // 打印链表    public static String printNode(Node n) {        StringBuilder sb = new StringBuilder();        for (; ; ) {            sb.append(n.item.toString());            if (!n.hasNext()) {                break;            }            n = n.next;        }        System.out.println(sb.toString());        return sb.toString();    }    private static class Node
{ E item; Node
next; Node(E element) { this.item = element; } public boolean hasNext() { return next != null; } } public static Node init(String s) { // 初始化链表 Node old = new Node(s.charAt(0)); Node current = old; for (int i = 1; i < s.length(); i++) { current = current.next = new Node(s.charAt(i)); } return old; } public static boolean check(String s) { if (s.length() < 2) { return true; } // 初始化链表 Node old = init(s); // 快慢指针 int m = 0; Node current = old; Node prev = null; Node next = null; Node newone1 = null; Node newone2 = null; for (; ; ) { boolean hasNext = current.hasNext(); next = current.next; // 判断奇偶,快指针到终点前,将链表逆序 if ((s.length() % 2 == 0 && m < s.length()) || (s.length() % 2 != 0 && m < s.length() - 1)) { if (prev == null) { current.next = null; } else { current.next = prev; } } else { // 快指针到终点后,将前半截链表和后半截链表拆分 if (m == s.length() - 1) { current = next; } newone1 = prev; newone2 = current; break; } m += 2; prev = current; current = next; if (!hasNext) { break; } } if (newone1 == null || newone2 == null) { return false; } String ss1 = printNode(newone1); String ss2 = printNode(newone2); return ss1.equals(ss2); }}

欢迎指出不足和错误,谢谢。

转载于:https://my.oschina.net/u/3047936/blog/3018596

你可能感兴趣的文章
搭建mysql主从复制教程
查看>>
Electron-如何保护源码?
查看>>
mysql索引
查看>>
高效 实现长连接保活:手把手教你实现 自适应的心跳保活机制
查看>>
webpack一些简单配置讲解
查看>>
18.11.1 - 基础(快速排序)
查看>>
ES6--var-let-const(ms)
查看>>
LeetCode 第 23 号问题:合并 K 个排序链表
查看>>
填坑-十万个为什么?(5)
查看>>
区块链软件公司:区块链中的签名怎样签?
查看>>
css百分比的应用
查看>>
Flutter开发一 Flutter Widget 之MaterialApp,Scaffold联系与区别
查看>>
Nuxt入门总结
查看>>
apply、call、bind的学习总结
查看>>
一、浅谈前端的2D、3D转换,以及动画的定义和调用(关于2D的一些操作)
查看>>
Python中关于++和—(自增和自减)的理解
查看>>
万物链、Ruff、沃尔顿链 物联网产品小结
查看>>
java常用jar包
查看>>
004-Java语言特点
查看>>
android 屏幕适配一:通过自定义View的方式实现适配
查看>>