要验证回文结构,核心就是正序和倒序是否相同,那第一时间想到的就是拿第一个和最后一个比,循环比较。
所以思想最简单的实现流程:
- 构建一个新链表,用来存倒序
- 然后正序链表和倒序链表进行对比即可。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
ListNode* DescLink(ListNode* old_link){ //构建一个倒序链表
ListNode *new_node, *new_head;
new_head = NULL;
while(old_link != NULL){
new_node = (ListNode*)malloc(sizeof(old_link));
new_node->val = old_link->val;
new_node->next = new_head;
new_head = new_node;
old_link = old_link->next;
}
return new_head;
}
bool isPail(ListNode* head) { //将正序链表和倒序链表循环比较元素即可
// write code here
ListNode *new_link = DescLink(head);
while(head != NULL){
if(head->val != new_link->val){
return false;
}
head = head->next;
new_link = new_link->next;
}
return true;
}
};