您的位置:首页 > 其它

回文链表

2016-07-12 21:14 197 查看

题目

设计一种方式检查一个链表是否为回文链表。

解题

回文串的特征就是正反看结果都一样

如: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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: