234. 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?
题目大意:
判断一个单链表是否为回文链表。
思路:
找到链表中间的节点,将链表从中间分为2部分,右半部分进行链表反向转换,然后左半部分和反转后的右半部分链表进行比较。得出结果。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode * reverseList(ListNode *head) //链表反转
{
ListNode *pre,*next;
pre = NULL;
next = NULL;
while(head)
{
next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
bool isPalindrome(ListNode* head) {
if( NULL == head || NULL == head->next)
return true;
int len = 0;
ListNode *p = head;
while(p)
{
len++;
p = p->next;
}
ListNode * rightListHead;
rightListHead = head;
int leftLen = len / 2;
int rightLen = len - leftLen;
int i = leftLen;
while(i)
{
rightListHead = rightListHead->next;
i--;
}
rightListHead = reverseList(rightListHead);
ListNode * left = head;
ListNode * right = rightListHead;
while(i < leftLen)
{
if(left->val == right->val)
{
left = left->next;
right = right->next;
}
else
{
return false;
}
i++;
}
return true;
}
};复习了单链表反转的方法。
2016-08-12 20:17:23