
问题
请判断一个链表是否为回文链表。
输入: 1->2
输出: false
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
Given a singly linked list, determine if it is a palindrome.
Input: 1->2
Output: false
Input: 1->2->2->1
Output: true
Follow up:
Could you do it in O(n) time and O(1) space?
示例
public class Program { public static void Main(string[] args) { var head = new ListNode(1) { next = new ListNode(2) { next = new ListNode(3) { next = new ListNode(2) { next = new ListNode(1) } } } }; var res = IsPalindrome(head); Console.WriteLine(res); res = IsPalindrome2(head); Console.WriteLine(res); Console.ReadKey(); } private static bool IsPalindrome(ListNode head) { var list = new List<int>(); var node = head; while(node != null) { list.Add(node.val); node = node.next; } var mid = list.Count / 2; for(var i = 0; i < mid; i++) { if(list[i] != list[list.Count - i - 1]) return false; } return true; } private static bool IsPalindrome2(ListNode head) { var list = new List<int>(); var list2 = new List<int>(); var node = head; while(node != null) { list.Add(node.val); list2.Add(node.val); node = node.next; } list.Reverse(); for(var i = 0; i < list.Count; i++) { if(list[i] != list2[i]) return false; } return true; } public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } } }
以上给出2种算法实现,以下是这个案例的输出结果:
True True
分析:
显而易见,以上2种算法的时间复杂度均为: 。
本文由 .Net中文网 原创发布,欢迎大家踊跃转载。
转载请注明本文地址:https://www.byteflying.com/archives/3905。