leetcode234.回文链表

快慢指针走到最后面,紧接着反转链表,最后遍历链表看是否val相等

题目描述

234 回文链表

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func isPalindrome(head *ListNode) bool {
    dummy:=&ListNode{-1,head}
    slow,fast:=head,head

    for fast!=nil && fast.Next!=nil{
        slow=slow.Next
        fast=fast.Next.Next
    }
    if fast!=nil{
        fast=fast.Next
        slow=slow.Next
    }

    l:=dummy.Next
    r:=revert(slow)

    for r!=nil{
        if l.Val!=r.Val{
            return false
        }
        l=l.Next
        r=r.Next
    }
    return true

}

func revert(head *ListNode) *ListNode{
    var pre *ListNode
    for head!=nil{
        next:=head.Next
        head.Next=pre
        pre=head
        head=next
    }

    return pre
}

Last updated