博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
阅读量:4127 次
发布时间:2019-05-25

本文共 1580 字,大约阅读时间需要 5 分钟。

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2输出: false

示例 2:

输入: 1->2->2->1输出: true

进阶:

你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def isPalindrome(self, head):        """        :type head: ListNode        :rtype: bool        """        if head == None :            return True        lst = []        p = head        while p:            lst.append(p.val)            p = p.next        return lst == lst[::-1]

 

以下是Java版本:

这道题让我们判断一个链表是否为回文链表,LeetCode中关于回文串的题共有六道,除了这道,其他的五道为  .链表比字符串难的地方就在于不能通过坐标来直接访问,而只能从头开始遍历到某个位置。那么根据回文串的特点,我们需要比较对应位置的值是否相等,那么我们首先需要找到链表的中点,这个可以用快慢指针来实现,使用方法可以参见之前的两篇  ,我们使用快慢指针找中点的原理是fastslow两个指针,每次快指针走两步,慢指针走一步,等快指针走完时,慢指针的位置就是中点。我们还需要用栈,每次慢指针走一步,都把值存入栈中,等到达中点时,链表的前半段都存入栈中了,由于栈的后进先出的性质,就可以和后半段链表按照回文对应的顺序比较了。

思路二: 

遍历链表,利用栈先进后出的性质,把链表前半段放入栈中,逐个弹出和链表后半段比较。(当然也可以全部放入栈)

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */	public class Solution {	    public boolean isPalindrome(ListNode head) {	        Stack
stack = new Stack
(); ListNode node = head; while(node != null) { stack.push(node.val); node = node.next; } while(!stack.empty()) { int value = stack.pop(); if(value != head.val) { return false; }else{ head = head.next; } } return true; } }

 

转载地址:http://mpuvi.baihongyu.com/

你可能感兴趣的文章
Valid Parentheses --括号匹配
查看>>
Count and Say
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
Valid Palindrome 简单的回文判断
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
web.py 0.3 新手指南 - 如何用Gmail发送邮件
查看>>
web.py 0.3 新手指南 - RESTful doctesting using app.request
查看>>
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
查看>>
web.py 0.3 新手指南 - 多数据库使用
查看>>
一步步开发 Spring MVC 应用
查看>>
python: extend (扩展) 与 append (追加) 的差别
查看>>
「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?...
查看>>
浅谈JavaScript的语言特性
查看>>
LeetCode第39题思悟——组合总和(combination-sum)
查看>>
LeetCode第43题思悟——字符串相乘(multiply-strings)
查看>>
LeetCode第44题思悟——通配符匹配(wildcard-matching)
查看>>
LeetCode第45题思悟——跳跃游戏(jump-game-ii)
查看>>
LeetCode第46题思悟——全排列(permutations)
查看>>
LeetCode第47题思悟—— 全排列 II(permutations-ii)
查看>>
LeetCode第48题思悟——旋转图像(rotate-image)
查看>>