234.回文链表
题目:请判断一个链表是否为回文链表。
示例 1: 输入: 1->2 输出: false
示例 2: 输入: 1->2->2->1 输出: true
思路:设置快慢指针进行移动,直至慢指针到达中间位置。接着定义三个指针curnode、nextnode、temp来进行链表反转。最后while循环在两段链表不为空时循环,判断每个位置的元素是否相等,并移动指针
class Solution {
public:
bool isPalindrome(ListNode* head)
{
if(!head || !head->next) return true;
ListNode * fast = head;
ListNode * slow = head;
while(fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
}
ListNode * curnode = slow;
ListNode * nextnode = slow->next;
while(nextnode)
{
ListNode * temp = nextnode->next;
nextnode->next = curnode;
curnode = nextnode;
nextnode = temp;
}
slow->next = NULL;
while(head && curnode)
{
if(head->val != curnode->val) return false;
head = head->next;
curnode = curnode->next;
}
return true;
}
};
该博客详细介绍了如何解决LeetCode中的234题——回文链表。通过设置快慢指针找到链表中点,然后翻转后半部分链表并比较前半部分与翻转后的后半部分是否相等,以此判断链表是否为回文。文中还提供了C++实现的代码示例,并分享了刷题技巧和相关笔记。
376

被折叠的 条评论
为什么被折叠?



