Leetcode 234 Palindrome Linked List
题目描述: Given a singly linked list, determine if it is a palindrome.
思路
既然是判断它是不是回文单链表,也就是判断它的顺向和逆向是不是相同。我用的是最笨的办法,就是利用一个新的链表存储它的逆向,然后将两个链表的值从头到尾进行比较。逆向的方法是将原链表的每个结点每次插到新链表的头部。
实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {
}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head) {
if(head==NULL)
return true;
bool flag=true;
ListNode* p3;
p3=head->next;
ListNode* revL=new ListNode(head->val);
while(p3){
ListNode* tmp=new ListNode(0);
tmp->val=p3->val;
tmp->next=revL;
revL=tmp;
p3=p3->next;
}
ListNode* p1;
p1=head;
ListNode* p2;
p2=revL;
while(p1 && p2){
if(p1->val!=p2->val)
flag=false;
p1=p1->next;
p2=p2->next;
}
return flag;
}
};
# ps: 刚开始由于不是很清楚LeetCode的初始化情况,将tmp初始化为0,结果改代码改到半夜1.30……所以有些小的地方也要注意,否则就是坑自己了。