Pniubi头像
关注
力扣234回文链表(双指针法)封面图

力扣234回文链表(双指针法)

234. 回文链表 - 力扣(LeetCode)

将链表的值复制到数组中 ,再使用双指针分别从两端遍历判断是否回文

class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> vals = new ArrayList<Integer>();

        // 将链表的值复制到数组中
        ListNode currentNode = head;
        while (currentNode != null) {
            vals.add(currentNode.val);
            currentNode = currentNode.next;
        }

        // 使用双指针判断是否回文
        int front = 0;
        int back = vals.size() - 1;
        while (front < back) {
            if (!vals.get(front).equals(vals.get(back))) {
                return false;//对称的每个位置都要相等,错一个都不行
            }
            front++;
            back--;
        }
        return true;
    }
}

(注意这里的数组不是严格意义上的数组,是口语化的叫法,这里其实是一个List,属于集合,这也是“补充”中Ⅱ的答案)

补充

Ⅰ

为啥要把链表弄到数组里面再用双指针,链表本身不能用指针吗? 

因为数组有下标而链表没有下标不好找位置

不仅耗时长,而且代码更加复杂

Ⅱ

vals.get(front).equals(vals.get(back))
为什么不能写成
vals[front].equals(vals[back])

后者编译错误不能运行

这里vals不能算是数组,本质是List集合,只能用get取值不能用数组类型的取值方法取值

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/Pniubi/article/details/167221530

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--