判断一个链表是否为回文链表(hashmap解法)

夏洛克.灿 2019-09-07 11:01:32
问题:请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true


解决方法:我想用hashmap解决该问题。思路是:遍历链表获取链表长度的同时将结点的值存储在hashmap的值中(hashmap的键按1,2,3.......排列)。最后首尾比较,如果有不相同的返回false,有相同的则返回true。

*******************************************************

疑问点:测试用例到第21个出现错误,结点值大于128,我发现hashmap的值不能大于等于128,为什么?尝试把数据类型改为long型发现也不行,网上也发现有人遇到该问题,但是没有答案。
非常感谢大佬能赐教。
class Solution {
public boolean isPalindrome(ListNode head) {
//获取链表长度
int length=0;
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
while(head!=null){
length++;
map.put(length,head.val);
head=head.next;
}
//判断长度是否为偶
if(length%2==1&&length!=1){
return false;
}

//首尾比较值是否相等
for(int i=0;i<length/2;i++){
if(map.get(i+1)!=map.get(length-i)){
return false;
}
}
return true;

}
}
...全文
185 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏洛克.灿 2019-09-08
  • 打赏
  • 举报
回复
那个if应该去掉的,因为我之前对回文有误解,以为回文必须是偶数
夏洛克.灿 2019-09-08
  • 打赏
  • 举报
回复
引用 5 楼 wowpH 的回复:
我觉得可以直接用异或来做,可以说下题号吗?这是力扣的题目吧。我去写写这题。
对!是力扣的题,题号是234
夏洛克.灿 2019-09-08
  • 打赏
  • 举报
回复
引用 2 楼 cwmlow 的回复:
因为你的HashMap定义的是Integer类型 Integer常量池-128~127,超出则new新Integer对象(开辟新的内存) ==判断的是引用地址 两者地址不同,当然返回false Long同理
谢谢!通过测试用例了
夏洛克.灿 2019-09-08
  • 打赏
  • 举报
回复
您的意思是value=map.get(key)方法得到值在-128~127时直接比较的是值大小,当不在这个范围时,要开辟新内存,这时候比较的就是引用地址了,对吗? 我把源代码改成了:
if(!map.get(i+1).equals(map.get(length-i))){
                return false;
            }
测试通过!非常感谢
心怀啊 2019-09-08
  • 打赏
  • 举报
回复
没注意未给长度抱歉,用ArrayList更快
wowpH 2019-09-07
  • 打赏
  • 举报
回复
引用 5 楼 wowpH 的回复:
我觉得可以直接用异或来做,可以说下题号吗?这是力扣的题目吧。我去写写这题。
呃呃呃,貌似不知道长度,还是避不开用数组。

至于你的 HashMap 的做法,你中间的那个 if 判断是干嘛的?我有点没看懂。
wowpH 2019-09-07
  • 打赏
  • 举报
回复
我觉得可以直接用异或来做,可以说下题号吗?这是力扣的题目吧。我去写写这题。
心怀啊 2019-09-07
  • 打赏
  • 举报
回复
想到用hashmap,为什么不直接用数组呢
oh_Maxy 2019-09-07
  • 打赏
  • 举报
回复
不要用!=比较,用equals比较。
cwmlow 2019-09-07
  • 打赏
  • 举报
回复
因为你的HashMap定义的是Integer类型 Integer常量池-128~127,超出则new新Integer对象(开辟新的内存) ==判断的是引用地址 两者地址不同,当然返回false Long同理
faith.huan 2019-09-07
  • 打赏
  • 举报
回复
报错信息提供一下

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧