Java for LeetCode 234 Palindrome Linked List

解题思路:

O(1)的空间复杂度,意味着不能通过开一个List来解决问题。我们可以把List分成前后两个部分,后半部分通过指针的相互赋值进行翻转即可。

JAVA实现如下:

public static boolean isPalindrome(ListNode head) {
		if (head == null || head.next == null)
			return true;
		ListNode middle = head, fast = head;
		while (fast != null && fast.next != null) {
			middle = middle.next;
			fast = fast.next.next;
		}
		ListNode rightHalf = reverseListNode(middle);
		while (rightHalf != null) {
			if (rightHalf.val != head.val)
				return false;
			head = head.next;
			rightHalf = rightHalf.next;
		}
		return true;
	}

	public static ListNode reverseListNode(ListNode head) {
		if (head == null || head.next == null)
			return head;
		ListNode pre = head, cur = head.next, tmp = head;
		head.next = null;
		while (cur != null) {
			tmp = cur.next;
			cur.next = pre;
			pre = cur;
			cur = tmp;
		}
		return pre;
	}
时间: 2024-10-12 22:15:43

Java for LeetCode 234 Palindrome Linked List的相关文章

leetCode 234. Palindrome Linked List 链表

234. Palindrome Linked List Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 题目大意: 判断一个单链表是否为回文链表. 思路: 找到链表中间的节点,将链表从中间分为2部分,右半部分进行链表反向转换,然后左半部分和反转后的右半部分链表进行比较.得出结果. 代码如下: /**  * Defi

Java [Leetcode 234]Palindrome Linked List

题目描述: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 解题思路: 使用O(n)的时间复杂度及O(1)的时间复杂度表明顺序遍历链表以及不能够开辟跟链表相当的空间,这样可以找出中间的位置,然后将后半部分的链表反转,然后跟前半部分的链表逐个位置比对. 代码如下: /** * Definition for singl

LeetCode 234. Palindrome Linked List (回文链表)

Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 题目标签:Linked List 题目给了我们一个 linked list,让我们判断它是不是回文. 这里可以利用 #206 Reverse Linked List 把右边一半的链表 倒转,然后从左右两头开始比较链表是否是回文. 这样的话,首先要找到链表的中间点,然后

LeetCode 234 Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. 思路: 回文结构从后向前遍历与从前向后遍历的结果是相同的,可以利用一个栈的结构,将出栈元素与正向移动的指针指向元素比较,即可判断. 解法: 1 /* 2 public class ListNode 3 { 4 int val; 5 ListNode next; 6 7 ListNode(int x) 8 { val = x; } 9 } 10 */ 11 12 import

[LeetCode] 234. Palindrome Linked List 解题思路

Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 问题:给定一个单向列表结构,判断它是不是回文的. 补充:是否可以在 O(n) 时间,O(1) 额外空间下完成? 解题思路: 对于数组,判断是否是回文很好办,只需要用两个指针,从两端往中间扫一下就可以判定. 对于单向列表,首先想到的是,将列表复制一份到数组中,然后用上面

LeetCode 234 Palindrome Linked List(回文链表)(*)(?)

翻译 给定一个单链表,确定它是否是回文的. 跟进: 你能够在O(n)时间和O(1)空间下完毕它吗? 原文 Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time and O(1) space? 进阶 bool judge(ListNode *head, ListNode* &cur) { if (!head) return true; if (!jud

(easy)LeetCode 234.Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 思想:转置后半段链表节点,然后比较前半段和后半段节点的值是否相等. 代码如下: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;

Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法

1. 问题描写叙述 给定一个单链表,推断其内容是不是回文类型. 比如1–>2–>3–>2–>1.时间和空间复杂都尽量低. 2. 方法与思路 1)比較朴素的算法. 因为给定的数据结构是单链表,要訪问链表的尾部元素,必须从头開始遍历.为了方便推断.我们能够申请一个辅助栈结构来存储链表的内容,第一次遍历将链表节点值依次入栈,第二次遍历比較推断是否为回文. /** * Definition for singly-linked list. * struct ListNode { * int

<LeetCode OJ> 234. Palindrome Linked List

234. Palindrome Linked List My Submissions Question Total Accepted: 33856 Total Submissions: 129644 Difficulty: Easy Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time and O(1) space? Subscribe to see