廊坊网站建设的公司外贸平台自建站
回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
输入:链表
输出:布尔值
思路:将链表的值存到数组列表中。然后使用双指针对数组列表进行遍历,判断值是否相同
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public boolean isPalindrome(ListNode head) {//使用数组列表存储数值,然后使用双指针进行判断List<Integer> tmpList = new ArrayList<>();//遍历链表while(head != null){//将值存进数组列表中tmpList.add(head.val);//移动链表head = head.next;}//定义双指针int left = 0;int right = tmpList.size() - 1;//遍历数组列表while(left < right){if(!tmpList.get(left).equals(tmpList.get(right))){return false;}left++;right--;}return true;}
}
注意:在力扣中使用双等号和equals()方法是一个效果,但是显然两者是不同的,==对于基本变量(byte,short,int,long,float,double,boolean,char)来说是比较值,而对于引用数据类型(String,Integer,类、接口、数组)来说是比较地址是否相同,
对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容