LeetCode:Palindrome Linked List
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
回文链表即原链表与逆置链表相同,采用辅助栈的特点将链表逆置。(知道链表长度,可以将链表节点顺序映射到数组中,使用数组直接定位元素的特点也可以得到o(n)的时间复杂度)
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 bool isPalindrome(ListNode* head) { 12 13 //一个元素或者没有元素 视为回文链表 14 if(head==NULL||head->next==NULL) return true; 15 16 stack<int> lstack; 17 //元素入栈 18 ListNode *p=head; 19 20 while(p) 21 { 22 lstack.push(p->val); 23 p=p->next; 24 } 25 26 //元素出栈与链表比较 27 p=head; 28 while(p) 29 { 30 if(p->val!=lstack.top()) 31 return false; 32 lstack.pop(); 33 p=p->next; 34 35 } 36 37 return true; 38 } 39 };