链表经典题目: 回文链表leetcode 234
一、原题回放
LeetCode 234:给定一个单向链表,判断它是否为回文链表并返回true或false。
例如下图这样一个链表,它的正序为“122”,反序为“221”,正序和反序不相同,因此我们认为其不是回文链表。
下图所示的链表正序和反序都是“1221”, 则我们认为它是回文链表。
我们需要注意的是,当链表中只有一个节点时,它的正序和反序都是第一个节点本身,当链表中不存在任何节点时,它的正序和反序都是空,所以只有一个节点的链表和没有任何节点的链表一定是回文链表。
二、思路梳理
从题目中我们知道,回文链表就是正序和反序相同的链表,因此我们可以采用依次比较链表中的第1个和第倒数第1个元素、第2个和第倒数第2个元素、第3个和第倒数第3个元素……直到比较完所有元素,只要在比较过程中有一个元素不同就认为它不是回文链表。
不过我们的链表单向链表,最后一个元素要遍历整个链表才能获得,在获取倒数第2个元素时又要将链表遍历一遍,如果我们的算法每次都从链表中直接遍历来获取元素进行比较的话,每次查找尾部元素的时候都要遍历整个链表,算法的时间复杂度将达到O(n^2),效率十分低下。因此我