博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
回文链表
阅读量:3961 次
发布时间:2019-05-24

本文共 1998 字,大约阅读时间需要 6 分钟。

题目来源

题目描述

在这里插入图片描述

解答一

将值复制到数组之后用双指针法(使用集合List存储链表中的元素,然后双指针,一个从头开始,一个从结尾开始进行比较)

class Solution {
public boolean isPalindrome(ListNode head) {
List
list=new ArrayList<>(); ListNode cur=head; while(cur!=null){
list.add(cur.val); cur=cur.next; } int i=0; int j=list.size()-1; while(i

解答二(递归)

class Solution {
private ListNode frontPointer; public boolean isPalindrome(ListNode head) {
frontPointer=head; return recuriselyCheck(head); } private boolean recuriselyCheck(ListNode currentNode){
if(currentNode!=null){
if(!recuriselyCheck(currentNode.next)){
return false; } if(currentNode.val!=frontPointer.val){
return false; } frontPointer=frontPointer.next; } return true; }}

解答三:快慢指针

在这里插入图片描述

class Solution {
public boolean isPalindrome(ListNode head) {
if(head==null){
return true; } ListNode first=endOfFirst(head); ListNode second=revserse(first.next); //判断是否为回文 ListNode p1=head; ListNode p2=second; boolean result=true; while(result&&p2!=null){
if(p1.val!=p2.val){
result=false; } p1=p1.next; p2=p2.next; } first.next=revserse(second); return result; } private ListNode revserse(ListNode head){
ListNode prev=null; ListNode cur=head; while(cur!=null){
ListNode next=cur.next; cur.next=prev; prev=cur; cur=next; } return prev; } private ListNode endOfFirst(ListNode head){
ListNode slow=head; ListNode fast=head; while(fast.next!=null&&fast.next.next!=null){
fast=fast.next.next; slow=slow.next; } return slow; }}

转载地址:http://pnlzi.baihongyu.com/

你可能感兴趣的文章
javascript ajax提出异步请求
查看>>
Hibernate 中的 QBC
查看>>
解快局域网共享问题
查看>>
xp常用命令
查看>>
java 加密解密
查看>>
xp 忘记密码
查看>>
xp 忘记密码
查看>>
java 过滤器
查看>>
java 过滤器
查看>>
as发送邮件
查看>>
AJAX应用之注册用户即时检测
查看>>
File 类小结
查看>>
java除去字符串空格
查看>>
jsp 2.0标记文件
查看>>
Hibernate中Criteria的完整用法
查看>>
sql jsp
查看>>
Word生成目录
查看>>
JSP彩色验证码源程序编写
查看>>
java操作Excel、PDF文件
查看>>
java 获得系统变量
查看>>