当前位置:   article > 正文

LeetCode 打卡 Day 60 —— 234. 回文链表

LeetCode 打卡 Day 60 —— 234. 回文链表

学习目标:

  • 完成 LeetCode 简单 级别 234 题

学习内容:

  1. LeetCode 题目 234


 学习时间:

  • 2022.07.01 18:00 PM

学习产出:

  • 题解1

       首先想到的是根据当前链表构建一个反向链表,同时遍历两个链表,比较对应节点的值是否相同,若存在值不等的节点,返回 false,否则返回 true,实现代码如下。

  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func isPalindrome(head *ListNode) bool {
  9. var t2 = new(ListNode)
  10. t2.Val = head.Val
  11. t2.Next = nil
  12. for t:=head; t.Next!=nil; t=t.Next{
  13. var t1 = new(ListNode)
  14. t1.Val = t.Next.Val
  15. t1.Next = t2
  16. t2 = t1
  17. }
  18. i:=head
  19. j:=t2
  20. for ; i!=nil && j!=nil; {
  21. if i.Val!=j.Val{
  22. return false
  23. }
  24. i=i.Next
  25. j=j.Next
  26. }
  27. return true
  28. }
  • 题解2

       题解2是看了官方给的解题方法,脑子愣了一下,其实题目很简单,遍历链表各个节点的值。将值按序依次存入链表中,假设列表总长l,比较位置 i 与 (l-i)/2位置的值是否相同,若相同返回 true,否则返回 false。实现代码如下。

  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func isPalindrome(head *ListNode) bool {
  9. var l []int
  10. for t:=head; t!=nil; t=t.Next {
  11. l = append(l, t.Val)
  12. }
  13. length := len(l)
  14. for k, v := range(l[:length/2]) {
  15. if v!=l[length-k-1]{
  16. return false
  17. }
  18. }
  19. return true
  20. }
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号