package LeetCode_LinkedList; /** * 题目: * Given a singly linked list, determine if it is a palindrome. * Example 1: * Input: 1->2 * Output: false * Example 2: * Input: 1->2->2->1 * Output: true * Follow up: * Could you do it in O(n) time and O(1) space? * 解题思路: * 找到链表中间节点,将链表分成两段,然后将后段链表进行反转, * 最后将反转后的链表依次与前半段链表进行比较,确定是否相等。 */ public class IsPalindrome_234_1016 { public boolean IsPalindrome(ListNode head) { if (head == null || head.next == null) { return true; } ListNode fast = head; ListNode slow = head; //将链表分成前后两部分 while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } if (fast != null) { slow = slow.next; } //反转链表 slow = Reverse(slow); fast = head; //依次比较前后半段链表节点的值是否相等 while (slow != null) { if (slow.val != fast.val) { return false; } slow = slow.next; fast = fast.next; } return true; } public ListNode Reverse(ListNode head) { ListNode pre = null; ListNode node = head; while (node != null) { ListNode next = node.next; node.next = pre; pre = node; node = next; } return pre; } public static void main(String[] args) { ListNode node1 = new ListNode(1); ListNode node2 = new ListNode(2); //ListNode node3 = new ListNode(2); //ListNode node4 = new ListNode(1); node1.next = node2; //node2.next = node3; //node3.next = node4; IsPalindrome_234_1016 test = new IsPalindrome_234_1016(); boolean result = test.IsPalindrome(node1); System.out.println(result); } }
Leetcode:(234) Palindrome Linked List(java)
最新推荐文章于 2020-03-03 20:04:32 发布