j

jaryue

V1

2023/03/18阅读:14主题:默认主题

回文链表

题目描述给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

解题思路

数组转换法 将链表转换成数组进行判断 判断数组中i位与len-1-i位是否相同

代码示例

func isPalindrome(head *ListNode) bool {
 var a []int
 for head != nil {
        a = append(a, head.Val)
        head = head.Next
    }
 for i:=0;i<len(a)/2;i++{
  if a[i]!=a[len(a)-1-i] {
   return false
  }
 }
 return true
}

执行结果

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 120 ms , 在所有 Go 提交中击败了 68.83% 的用户 内存消耗: 9.3 MB , 在所有 Go 提交中击败了 68.83% 的用户 通过测试用例: 90 / 90

更多

内置函数递归法 我开开始也想用递归法,但是发现写不出来原因是函数只传递一个参数而我需要用到两个参数,所以就想到了数组转换的方法 官方采用的是内置函数的方法,在函数内部再定义一个函数,这样原先的 head就可以继续调用\

func isPalindrome(head *ListNode) bool {
    frontPointer := head
    var recursivelyCheck func(*ListNode) bool
    recursivelyCheck = func(curNode *ListNode) bool {
        if curNode != nil {
            if !recursivelyCheck(curNode.Next) {
                return false
            }
            if curNode.Val != frontPointer.Val {
                return false
            }
            frontPointer = frontPointer.Next
        }
        return true
    }
    return recursivelyCheck(head)
}

执行用时: 148 ms , 在所有 Go 提交中击败了 23.43% 的用户 内存消耗: 18.1 MB , 在所有 Go 提交中击败了 6.04% 的用户 通过测试用例: 90 / 90 更多解决方法请参考:https://leetcode.cn/problems/palindrome-linked-list/solution/

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1