Palindrome Linked List

来源:互联网 发布:监控电脑屏幕的软件 编辑:程序博客网 时间:2024/05/21 07:15

Given a singly linked list, determine if it is a palindrome.

Follow up:
Could you do it in O(n) time and O(1) space?

这种题不希望再错了。明明很简单的。其实leetcode上面的题说白了就是能不能跟你理解的类型联系起来。如果知道类型了,而且也有思路,写不对,很气的。

这道题的思路是:1. 快慢指着找到中间点(都从head开始,找到中间的值。如果是odd, 那么slow停留的位置在正中间;如果希望找到)2. 翻转后半段,这里需要注意在最后返回的时候,再把传入的root节点的next置为空。


代码:

ublic boolean isPalindrome(ListNode head) {        if(head == null ||head.next == null ) return true;        ListNode slow = head;        ListNode fast = head;// 1 2 3 4 5        while(fast.next != null  && fast.next.next != null){            slow = slow.next;            fast = fast.next.next;        }        ListNode reverseHead = reverse(slow.next);        while(head != null && reverseHead != null){            if(head.val != reverseHead.val){                return false;            }else{                head = head.next;                reverseHead = reverseHead.next;            }        }        return true;    }    private ListNode reverse(ListNode node){        ListNode dummy = new ListNode(-1);        dummy.next = node;        ListNode pre = dummy;        ListNode cur = node;        while(cur != null){            ListNode next = cur.next;            cur.next = pre;            pre = cur;            cur = next;        }        node.next = null;        return pre;    }




0 0
原创粉丝点击