JAVA链表中的回文链表结构

JAVA链表中的回文链表结构作为一个java初学者,最近遇到了回文链表结构这个难题,经过一番学习总算搞清楚个大概。先来说一下什么是回文链表,会问链表在我们生活中经常能够遇到。会问链表的结构就是例如:1->2->3->2->1。我们将它反转过来还是与原链表相同,这种就称为回文结构。具体方法:1.先找到链表的中间位置2.然后将中间位置的链表反转3.从两边向中间遍历代码如图classNode{publi…

大家好,又见面了,我是你们的朋友全栈君。

作为一个java初学者,最近遇到了回文链表结构这个难题,经过一番学习总算搞清楚个大概。

先来说一下什么是回文链表,会问链表在我们生活中经常能够遇到。会问链表的结构就是

例如:1->2->3->2->1。我们将它反转过来还是与原链表相同,这种就称为回文结构。

具体方法:1.先找到链表的中间位置

                  2.然后将中间位置的链表反转

                  3.从两边向中间遍历

代码如图

class Node {
    public int data;
    public Node next;
    //构造方法
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}
public class MyLinkedList {
    public Node head;//保存单链表的头节点的引用
 public boolean chkPalindrome() {
        //判断头节点是否为空
        if(this.head == null) {
            return false;
        }
        //判断头节点的next是否为空,如果为空,证明只有一个链表,就是回文链表
        if(this.head.next == null) {
            return true;
        }
        //找出链表的中间位置
        Node fast = this.head;
        Node slow = this.head;

        while(fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        //把中间位置之后的链表反转
        Node cur = slow.next;
        while(cur != null) {
            Node curNext = cur.next;
            cur.next = slow;
            slow = cur;
            cur = curNext;
        }
        //从两边向中间遍历
        while(slow != this.head) {
            if(slow.data != this.head.data) {
                return false;
            }
            if(this.head.next == slow) {
                return true;
            }
            slow = slow.next;
            this.head = this.head.next;
        }
        return true;
    }
}

类似的链表题还有很多,我也是刚刚接触,这个博客就当复习了。如果有不对的地方还请大佬指正。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139544.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Android 极简反射教程及应用示例

    Android 极简反射教程及应用示例

    2021年9月16日
  • QFile 总结

    QFile 总结voidQFile::flush()[虚]刷新文件缓存到磁盘。close()也刷新文件缓存。

    2022年6月1日
  • javascript alert乱码的解决方法

    javascript alert乱码的解决方法

    2021年9月25日
  • 混合开发hybrid原理_混合开发是什么意思

    混合开发hybrid原理_混合开发是什么意思(一)开发移动三种模式(1)NativeApp:(原生APP)写App的同学,比如ios,安卓等(2)HybridApp:(混合开发),h5页面嵌入App中(3)WebApp:用手机浏览器打开h5页面(二)优缺点:(1)NativeApp:基本可以操作任何手机系统,比如(视频、扫码、获取通讯录、打电话)等(2)HybridApp:混合开发,如果想要h5操作手机系统,需要app同学配合前端,给前端提供相应的操作api前端也可以自己做混合开发,需要借助.

    2022年9月22日
  • pytest指定用例_测试用例怎么编写

    pytest指定用例_测试用例怎么编写前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

    2022年7月28日
  • python中空格的代码_python 空格

    python中空格的代码_python 空格初学python,不明白代码之间时空格的用处比如:print”Hens”,25+30/6print”hens”,25+30/6一个有空格一个代码之间的空格其实没有什么作用。只是为了增强可读性。代码不是越集中越好,符合规范的结构,比如让大括号单独成行,反而看起来更加清晰、舒服,是更能避免笔误的好习惯。虽然,代码可读性是通过设计来实现的。python如何添加多个空格我添加了多个空…

    2022年9月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号