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

学习目标:

  • 完成 LeetCode 简单 级别 234 题

学习内容:

  1. LeetCode 题目 234

LeetCode 打卡 Day 60 —— 234. 回文链表_第1张图片


 学习时间:

  • 2022.07.01 18:00 PM

学习产出:

  • 题解1

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

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func isPalindrome(head *ListNode) bool {
    var t2 = new(ListNode)
    t2.Val = head.Val
    t2.Next = nil

    for t:=head; t.Next!=nil; t=t.Next{
        var t1 = new(ListNode)
        t1.Val = t.Next.Val
        t1.Next = t2
        t2 = t1
    }
    
    i:=head
    j:=t2
    for ; i!=nil && j!=nil; {
        if i.Val!=j.Val{
            return false
        }
        i=i.Next
        j=j.Next
    }
    return true
}
  • 题解2

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

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func isPalindrome(head *ListNode) bool {
    var l []int

    for t:=head; t!=nil; t=t.Next {
        l = append(l, t.Val)
    }
    length := len(l)
    for k, v := range(l[:length/2]) {
        if v!=l[length-k-1]{
            return false
        }
    }
    return true
}

你可能感兴趣的:(LeetCode,Go,leetcode,golang)