Skip to content

Latest commit

 

History

History
135 lines (94 loc) · 2.38 KB

File metadata and controls

135 lines (94 loc) · 2.38 KB

中文文档

Description

Implement a function to check if a linked list 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?

Solutions

Python3

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        if head is None or head.next is None:
            return True
        slow, fast = head, head.next
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
        cur = slow.next
        slow.next = None
        while cur:
            t = cur.next
            cur.next = slow.next
            slow.next = cur
            cur = t
        t = slow.next
        while t:
            if head.val != t.val:
                return False
            t = t.next
            head = head.next
        return True

Java

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        if (head == null || head.next == null) {
            return true;
        }
        ListNode slow = head, fast = head.next;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        ListNode cur = slow.next;
        slow.next = null;
        while (cur != null) {
            ListNode t = cur.next;
            cur.next = slow.next;
            slow.next = cur;
            cur = t;
        }
        ListNode t = slow.next;
        while (t != null) {
            if (head.val != t.val) {
                return false;
            }
            head = head.next;
            t = t.next;
        }
        return true;
    }
}

...