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?
Could you do it in O(n) time and O(1) space?
找到list的中点, 然后翻转后面的list 一一对比
public class Solution { public boolean isPalindrome(ListNode head) { if (head == null || head.next == null) { return true; } ListNode fast = head, slow = head; while (fast.next != null && fast.next.next != null) { fast = fast.next.next; slow = slow.next; } ListNode cur = reverse(slow.next);// 这里导入的是中点的下一个 因为这种找中点情况 偶数时候是在左中点, 奇数时候是在正中点 while (cur != null) {////这里不能是head!=null 对于0->0这个list head后面还有一个元素0 if (head.val != cur.val) { return false; } head = head.next; cur = cur.next; } return true; } public ListNode reverse(ListNode node) { ListNode dummy = new ListNode(0); dummy.next = node; ListNode next = node.next; while (next != null) { node.next = next.next; next.next = dummy.next; dummy.next = next; next = node.next; } return dummy.next; } }
没有评论:
发表评论