【LeetCode】—— 回文链表LeetCode234题

LeetCode234题回文链表

题目描述

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false

示例 2:

输入: 1->2->2->1
输出: true
解题思路
  • 首先利用快慢指针找到链表的中间节点,再将链表的后半部分逆置之后对比两部分链表是否相同,相同为回文链表返回true,不同则不是,返回false。
    回文链表
代码实现
//1->2->3->3->2->1
struct ListNode* reverselist(struct ListNode* head)
{
	//利用递归将链表逆置
	if (head == NULL || head->next == NULL) return head;
	struct ListNode* h = reverselist(head->next);
	head->next->next = head;
	head->next = NULL;

	return h;
}

bool isPalindrome(struct ListNode* head) {
	if (head == NULL || head->next == NULL) return true;
	struct ListNode* fast = head;
	struct ListNode* slow = head;
	//让慢指针走到链表中间位置
	while (fast && fast->next)
	{
		fast = fast->next->next;
		slow = slow->next;
	}
	slow = reverselist(slow);//逆置后半部分的链表

	//比较前半部分的链表和后半部分的链表是否相同
	while (slow)
	{
		if (slow->val != head->val)
		{
			return false;
		}
		slow = slow->next;
		head = head->next;
	}

	return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值