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 };

 

posted @ 2015-08-04 10:59  尾巴草  阅读(132)  评论(0编辑  收藏  举报