【题目】 给定一个链表的头节点head,请判断该链表是否为回文结构(链表左右对称)。
例如: 1->2->1,返回true。 1->2->2->1,返回true。 15->6->15,返回true。 1->2->3,返回false。
进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂 度达到O(1)。
第一种思路
遍历两次链表,第一次把链表的值放在栈中,第二次遍历比对栈中的值和链表中的值的关系.
代码:
第二种思路
定义两个指针,一个每次走一步的慢指针,一个每次走两步的快指针.两个指针遍历链表,当快指针走到最后的时候慢指针会刚好走到中间,逆转慢指针走到的结点的后面结点,然后链表从两边向中间进行比对,比对完了再把链表进行恢复