LeetCode刷题之HOT100之回文链表

下午好啊,最近似乎陷入了懈怠期,学习提不上劲。循环了一天的《偏爱》,看了四五集仙剑,做题吧,晚上吃完晚饭回来稍微学一下。放个听歌记录图:

在这里插入图片描述

1、题目描述

在这里插入图片描述

2、逻辑分析

回文链表让我想到了回文数字,唯一不同的是这里的数据结构是链表。官方给出了三种解法:将值复制到数组中后用双指针法、递归以及快慢指针。我们先来看看第一种将值复制到数组中后用双指针法:一共为两个步骤:

  1. 复制链表值到数组列表中。
  2. 使用双指针法判断是否为回文。

代码演示

public boolean isPalindrome(ListNode head) {
        // 创建一个ArrayList来存储链表中的节点值  
        List<Integer> nums = new ArrayList<Integer>();
        // 创建一个临时指针,指向链表的头节点 
        ListNode cur = head;
        // 遍历链表,将每个节点的值添加到ArrayList中 
        while(cur != null){
            nums.add(cur.val);
            cur = cur.next;
        }
        // 初始化两个指针,一个指向ArrayList的开头,一个指向ArrayList的末尾
        int left = 0;
        int right = nums.size() - 1;
        // 当两个指针没有相遇时,继续比较
        while(left < right){
            // 如果左右指针所指的元素不相等,说明链表不是回文的,返回false 
            if(!nums.get(left).equals(nums.get(right))){
                return false;
            }
            left++;
            right--;
        }
        // 如果两个指针相遇或交错,说明链表是回文的,返回true
        return true;
    }

思路很简单,注释很详细,不过赘述。时间复杂度:O(n),空间复杂度:O(n)。

接下来我们再看看第三个方法:快慢指针。算球了,我看了看第三种方法,发现过于繁琐,在这里打个TODO,下次做的时候再看吧。该吃饭了,BYE!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值