【LeetCode】链表——回文链表
程序员文章站
2022-05-06 20:29:56
...
链接:https://leetcode-cn.com/explore/learn/card/linked-list/195/classic-problems/754/
回文链表是指正序和逆序均相同的链表。
思路:使用快慢指针将链表一分为二,找到链表的中间节点后,将链表的后半部分进行反转,比较反转后的链表是否与前半部分相同,相同则为回文链表。
代码:
/**
* 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 || head->next==NULL) return true;
ListNode *fast=head, *slow=head;
while(fast->next && fast->next->next)//链表分半
{
fast=fast->next->next;
slow=slow->next;
}
ListNode *last=slow->next,*p=head;
while(last->next) //链表反转
{
ListNode* cur=last->next;
last->next=cur->next;
cur->next=slow->next;
slow->next=cur;
}
while(slow->next)//判断是否相同
{
slow=slow->next;
if(slow->val != p->val) return false;
p=p->next;
}
return true;
}
};
参考博客:https://blog.csdn.net/qq_37765748/article/details/79770799
上一篇: 网络爬虫笔记 :一个简单的爬虫框架
下一篇: Spring容器