标签:
设计一种方式检查一个链表是否为回文链表。
回文串的特征就是正反看结果都一样
如:aba、abcsdffdscba
所有翻转链表后比较
但是翻转链表改变了原始链表之间的指针
需要先复制原始链表
复制链表和选择链表进行比较
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
/**
* @param head a ListNode
* @return a boolean
*/
public boolean isPalindrome(ListNode head) {
// Write your code here
if(head == null || head.next == null)
return true;
ListNode p = head;
ListNode curHead = copy(head);
ListNode revHead = reverse(p);
boolean flag= compare(curHead,revHead);
return flag;
}
public boolean compare(ListNode l1,ListNode l2){
while(l1!=null && l2!=null){
if(l1.val!=l2.val)
return false;
l1 = l1.next;
l2 = l2.next;
}
return true;
}
public ListNode copy(ListNode head){
ListNode curHead = new ListNode(-1);
ListNode cur = curHead;
ListNode p = head;
while(p!=null){
cur.next = new ListNode(p.val);
p = p.next;
cur = cur.next;
}
return curHead.next;
}
public ListNode reverse(ListNode head){
ListNode revHead = null;
ListNode cur = null;
ListNode p = head;
while(p!=null){
ListNode pNext = p.next;
if(pNext==null){
revHead = p;
}
p.next = cur;
cur = p;
p = pNext;
}
return revHead;
}
}
标签:
原文地址:http://blog.csdn.net/qunxingvip/article/details/51892631