Skip to content

Latest commit

 

History

History

02.06.Palindrome Linked List

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

English Version

题目描述

编写一个函数,检查输入的链表是否是回文的。

 

示例 1:

输入: 1->2
输出: false 

示例 2:

输入: 1->2->2->1
输出: true 

 

进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

解法

先利用快慢指针找到链表中点,之后将后半部分链表利用头插法逆序,再比对前后两段链表得出结果。

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;
    }
}

...