链表的回文结构

题目描述

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 链接

测试样例

1->2->2->1
返回:true

解题思路

可以利用数据结构中的栈来进行判断

解决方案

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class PalindromeList {
    public boolean chkPalindrome(ListNode A) {

		Stack<Integer> stack = new Stack<Integer>();
		ListNode cur = A;
		while(cur != null){
			if(!stack.isEmpty() && stack.peek() == cur.val){
				stack.pop();
			}else{
				stack.push(cur.val);
			}
			cur = cur.next;
		}
		
		return stack.isEmpty();
	
    }
}

测试样

import org.junit.; import static org.junit.Assert.;

public PalindromeListTest { @Test public void testOne() { ListNode A = new ListNode(1); ListNode B = new ListNode(2); ListNode C = new ListNode(2); ListNode D = new ListNode(1);

	A.next = B;
	B.next = C;
	C.next = D;
	
    assertEquals(true,
    		new PalindromeList().chkPalindrome(A));
}

}

转载于:https://my.oschina.net/u/553266/blog/1492790

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值