题解 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
http://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
思路
- 得到反向的链表
- 依次比较两链表结点值是否相同,有不相同则返回false;直到最后都没有不相同则返回true
注意
得到反向链表而不是将原链表反向,需要copy一份出来
public class Solution {
public boolean isPail (ListNode head) {
if(head==null) return true;
ListNode rev=reverseList(copyList(head));
while(head!=null){
if(head.val!=rev.val) return false;
head=head.next;
rev=rev.next;
}
return true;
}
//反转链表
public static ListNode reverseList(ListNode head){
if(head==null) return head;
ListNode las=null;
ListNode nex=head.next;
head.next=las;
while(nex!=null){
las=head;
head=nex;
nex=head.next;
head.next=las;
}
return head;
}
//拷贝链表
public static ListNode copyList(ListNode head){
if(head==null) return head;
ListNode res=new ListNode(head.val);
head=head.next;
ListNode now=res;
while(head!=null){
now.next=new ListNode(head.val);
head=head.next;
now=now.next;
}
return res;
}
}