Leetcode 234. Palindrome Linked List回文链表
来源:互联网 发布:美图秀秀软件怎样赚钱 编辑:程序博客网 时间:2024/06/09 19:51
一、题目描述
判断链表是否是回文链表,要求时间复杂度为O(n),空间复杂度为O(1)
二、解题思路
1、取得链表的长度
2、反转任意一半链表
3、双指针从前往后扫描,判断是否是回文链表
三、代码实现
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { /** 1.获取链表长度 */ public int lengthOfList(ListNode head) { ListNode p = head; int n = 0; while ( p != null) { n++; p = p.next; } return n; } /** 2.反转一半链表 */ public ListNode reverseList(ListNode head) { ListNode pre = head; ListNode p = pre.next; ListNode next; while (p != null) { next = p.next; p.next = pre; pre = p; p = next; } head.next = null; return pre; } /** 3.判断是否是回文链表 */ public boolean isPalindrome(ListNode head) { if (head == null || head.next == null) return true; int n = lengthOfList(head); //获取链表的长度 int half = n/2; //1 2 3 4 3 2 1 ListNode leftEnd = head; for (int i = 0; i < half - 1; i++) { leftEnd = leftEnd.next; } ListNode rightStart = leftEnd.next; if(n%2 != 0){ rightStart = rightStart.next; } rightStart = reverseList(rightStart); ListNode leftStart = head; for (int i = 1; i <= half; i++) { if(leftStart.val != rightStart.val) { return false; } else { leftStart = leftStart.next; rightStart = rightStart.next; } } return true; }}
0 0
- [理解leetcode解法]234. Palindrome Linked List 回文链表
- leetcode 234. Palindrome Linked List-回文链表|双指针
- Leetcode-234. Palindrome Linked List(判断链表是否回文)
- LeetCode 234. Palindrome Linked List判断链表是否回文
- LeetCode:234. Palindrome Linked List 回文链表 Java
- Leetcode 234. Palindrome Linked List回文链表
- leetcode 234. Palindrome Linked List 回文链表的判断
- 234. Palindrome Linked List&回文链表
- 234. Palindrome Linked List 回文链表
- 234. Palindrome Linked List回文链表
- LeetCode 234: Palindrome Linked List (回文链表)
- LeetCode:Palindrome Linked List(回文链表)
- LeetCode 234 Palindrome Linked List(回文链表)(*)
- 【Leetcode】234. Palindrome Linked List -判断链表是否为回文序列
- leetcode234---Palindrome Linked List(回文链表)
- Palindrome Linked List 回文链表
- Palindrome Linked List(回文链表)
- Palindrome Linked List 回文链表
- Java基础常见英语词汇
- TextView 插入图片
- 面试经历
- Imageloader
- PHP基础1-变量/数据类型/单引号双引号区别/运算符/内容输出
- Leetcode 234. Palindrome Linked List回文链表
- 傅里叶变换的实质
- Linux:硬连接与软链接
- Markdown 学习小结
- Java实现a+aa+aaa+aaaa...........(共b个数)
- 403 Forbidden错误的原因和解决方法
- Java后端书架
- ♪ ♩ ♫ 海的声音(二)《三体-死神永生》
- java,动态规划,算法导论之钢条切割(O(n)时间渐进性)