难度 easy
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
解题思路:这里的解题思路还是相对比较简单的,就是用快慢指针找到中间节点,然后把后半段倒置一下,最后是从起点和后半段的起点一起往后遍历,根据他们的值是否相等,然后进行判断。
代码 t76 s53 java
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public boolean isPalindrome(ListNode head) { if(head==null || head.next==null) return true; ListNode slow = head, fast = head; while(fast.next!=null && fast.next.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; } cur = slow.next; while(cur!=null){ if(head.val!=cur.val) return false; head = head.next; cur = cur.next; } return true; } }
链表的翻转还是非常重要的,一定要记住写法。
参考资料: