leetocde234. 回文链表

久未见 提交于 2020-01-12 15:08:55

思路:这个题的方法有很多,我这里采用的是一种转换思路,首先遍历所有结点并且把结点都取出来放到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());
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!