判断一个链表是否为回文链表,说出你的思路并手写代码
参考回答:
思路:使用栈存储链表前半部分,然后一个个出栈,与后半部分元素比较,如果链表长度未知,可以使用快慢指针的方法,将慢指针指向的元素入栈,然后如果快指针指向了链表尾部,此时慢指针指向了链表中间bool is_palindromic_list2(mylist *a_list) { if(a_list == nullptr) { return false; } stack<int>list_value; mylist * fast =a_list; mylist *slow =a_list; while(fast->next!=nullptr && fast->next->next!=nullptr) { list_value.push(slow->next->value); slow = slow->next; fast = fast->next->next; } cout<<"middle elem value is "<<slow->next->value<<endl; if(fast->next != nullptr) { cout<<"the list has odd num of node"<<endl; slow =slow->next; } int cur_value; while(!list_value.empty()) { cur_value = list_value.top(); cout<<"stack top value is"<<cur_value<<endl; cout<<"list value is "<<slow->next->value<<endl; if(cur_value != slow->next->value) { return false; } list_value.pop(); slow = slow->next; } return true; }