赞
踩
学习时间:
首先想到的是根据当前链表构建一个反向链表,同时遍历两个链表,比较对应节点的值是否相同,若存在值不等的节点,返回 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是看了官方给的解题方法,脑子愣了一下,其实题目很简单,遍历链表各个节点的值。将值按序依次存入链表中,假设列表总长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
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。