思路:这个题的方法有很多,我这里采用的是一种转换思路,首先遍历所有结点并且把结点都取出来放到StringBuilder对象里,然后转换成Sring比较s与s的倒置,代码如下(错误):
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
StringBuilder s=new StringBuilder();
while(head!=null)
{
s.append(head.val);
head = head.next;
}
return s.toString().equals(s.reverse().toString());
}
}
然后被这个测试用例打败了:[-129,-129],这个负号对于字符串很不友好,其实最关键是的-123反转后会变成321-,所有如果我们必然不能用reverse函数来弄,那就用两个对象,一个头插法,一个尾插法进行解决。(最关键的地方就是,这里并不是字符串的回文,而是链表结点val的回文,即每个链表都是一个整体)
正确代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder();
while(head!=null){
//类似尾插
s1.append(head.val);
//类似头插
s2.insert(0,head.val);
head = head.next;
}
return s1.toString().equals(s2.toString());
}
}
来源:CSDN
作者:任泓洁的小生活
链接:https://blog.csdn.net/RHJlife/article/details/103944348