github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/algorithm/leetcode/palindrome_linked_list_test.go (about)

     1  package leetcode
     2  
     3  // 234. 回文链表 https://leetcode-cn.com/problems/palindrome-linked-list/
     4  func isPalindrome(head *ListNode) bool {
     5  	if head == nil || head.Next == nil {
     6  		return true
     7  	}
     8  
     9  	slow := head // 快指针每轮多走1步
    10  	fast := head // 慢指针
    11  	var pre *ListNode = nil
    12  	var temp *ListNode = nil
    13  
    14  	for fast != nil && fast.Next != nil {
    15  		fast = fast.Next.Next
    16  		// 反转
    17  		temp = slow.Next
    18  		slow.Next = pre
    19  		pre = slow
    20  		slow = temp
    21  	}
    22  	if fast != nil {
    23  		slow = slow.Next
    24  	}
    25  
    26  	for slow != nil {
    27  		if slow.Val != pre.Val {
    28  			return false
    29  		}
    30  		slow = slow.Next
    31  		pre = pre.Next
    32  	}
    33  
    34  	return true
    35  }