【Java】编写函数,检查链表是否为回文

原创 2015年07月09日 15:38:02

快行指针找到链表中间结点

1. 反转前半部分看是否和后半部分一样

2. 将前半部分入栈,迭代访问剩下的一半结点,每次的栈顶元素一样则是回文链表


import java.util.Stack;
public class isHuiWen {
	public boolean isPalinddrome(LinkedListNode head) {
		LinkedListNode fast = head;
		LinkedListNode slow = head;
		
		Stack<Integer> stack = new Stack<Integer>();
		
		while( fast != null && fast.next != null ) {
			stack.push(slow.data);
			slow = slow.next;
			fast = fast.next.next;
		}
		
		//如果链表有奇数个元素,那么fast这时不为空,则比较后半段时跳过中间元素
		if ( fast != null ) {
			slow = slow.next;
		}
		
		while (slow != null) {
			int top = stack.pop().intValue();
			//如果不相同,则不是回文
			if (top != slow.data) {
				return false;
			}
			slow= slow.next;
		}
		return true;
	}
}


递归的解法:

class Result{
	public LinkedListNode node;
	public boolean result;
}

Result isPalindromeRecurse(LinkedListNode head, int length) {
	if (head == null || length == 0) {
		return new Result(null, true);
	}
	else if(length == 1) {
		return new Result(head.next,true);
	}
	else if(length == 2) {
		return new Result(head.next.next, head.data == head.next.data);
	}
	Result res = isPalindromeRecurse(head.next, length -2);
	if(!res.result || res.node == null){
		return res;
	}
	else{
		res.result = head.data == res.node.data;
		res.node = res.node.next;
		return res;
	}
}

boolean isPalinddrome(LinkedListNode head) {
	Result p = isPalindromeRecurse(head, listSize(head));
	return p.result;
}



链表之判断一个链表是否为回文结构(一)

package com.zuo.linkedlist; import java.util.Stack; import com.zuo.linkedlist.Josephuskill2.Node; ...
  • u011068702
  • u011068702
  • 2016年01月03日 02:00
  • 464

判断一个链表是否为回文结构

题目:判断一个链表是否为回文结构。 要求:时间复杂度为 O(n),空间时间复杂度为O(1)。思路分析:回文链表的特点就是对称,那么要判断是否回文,就可以用两个指针指向对称的节点,看它们的数据是否一样...
  • cyuyanenen
  • cyuyanenen
  • 2016年07月02日 20:31
  • 1410

《程序员面试金典》--判断链表是否为回文链表

题目描述: 请编写一个函数,检查链表是否为回文。给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。 测试样例:{1,2,3,2,1} 返回:true 测试样例...
  • zdplife
  • zdplife
  • 2015年09月24日 19:36
  • 1228

LintCode:回文链表

回文链表  描述 笔记  数据  评测 设计一种方式检查一个链表是否为回文链表。 您在真实的面试中是否遇到过这个题?  Yes 样例 1->2->1 就是一个回文链...
  • zyf19930610
  • zyf19930610
  • 2016年11月23日 22:20
  • 352

LeetCode234_PalindromeLinkedList (判断是否为回文链表) Java题解

题目: Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it...
  • u012249528
  • u012249528
  • 2015年07月29日 11:40
  • 2942

判断一个链表是否是回文链表

题目描述:判断一个链表是否是回文链表(如何能达到时间复杂度为O(n)的同时空间复杂度为O(1)) 解题思路:最初的思路是遍历链表,取出其中的结点值拼成字符串,然后判断字符串是否是回文字符串,如下: b...
  • u012050154
  • u012050154
  • 2016年05月26日 08:41
  • 1410

shell脚本实现检测回文字符串

所有回文字的结构特征如下:
  • zaizai09
  • zaizai09
  • 2014年07月29日 18:01
  • 1607

编写函数,判断一个字符串是否是回文

1. 编写函数,判断一个字符串是否是回文。若是回文函数返回值为1,否则返回值为0。回文是顺读和倒读都一样的字符串。 在主函数中完成:输入要判断的字符串,调用函数,输出“yes”或“no”。 提示:...
  • slj_win
  • slj_win
  • 2012年01月16日 10:36
  • 20859

java判断一个字符串是否是回文

java实现判断一个字符串是否是回文
  • congcong7267
  • congcong7267
  • 2017年11月25日 21:36
  • 124

java 记——课本例题,判断一个字符串是否是回文

程序代码: import java.util.Scanner; public class Lo { public static void main(String[] args){ Scanner...
  • lily1143
  • lily1143
  • 2015年11月04日 19:05
  • 1554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】编写函数,检查链表是否为回文
举报原因:
原因补充:

(最多只允许输入30个字)