/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
// 返回链表的中间节点
struct ListNode* middleNode(struct ListNode* pHead)
{
struct ListNode* fast = pHead;
struct ListNode* slow = pHead;
while (fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
// 反转链表
struct ListNode* reverseList(struct ListNode* pHead)
{
struct ListNode* cur = pHead;
struct ListNode* newHead = NULL;
while (cur)
{
struct ListNode* Next = cur->next;
// 头***r /> cur->next = newHead;
newHead = cur;
// 往后走
cur = Next;
}
return newHead;
}
bool isPail(struct ListNode* head ) {
// write code here
struct ListNode* headA = head;
struct ListNode* midNode = middleNode(head); // 求链表的中间节点
struct ListNode* headB = reverseList(midNode); // 让链表中间节点后面的部分反转
while (headA && headB)
{
if (headA->val != headB->val)
return false;
headA = headA->next;
headB = headB->next;
}
return true;
}
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
// 返回链表的中间节点
struct ListNode* middleNode(struct ListNode* pHead)
{
struct ListNode* fast = pHead;
struct ListNode* slow = pHead;
while (fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
// 反转链表
struct ListNode* reverseList(struct ListNode* pHead)
{
struct ListNode* cur = pHead;
struct ListNode* newHead = NULL;
while (cur)
{
struct ListNode* Next = cur->next;
// 头***r /> cur->next = newHead;
newHead = cur;
// 往后走
cur = Next;
}
return newHead;
}
bool isPail(struct ListNode* head ) {
// write code here
struct ListNode* headA = head;
struct ListNode* midNode = middleNode(head); // 求链表的中间节点
struct ListNode* headB = reverseList(midNode); // 让链表中间节点后面的部分反转
while (headA && headB)
{
if (headA->val != headB->val)
return false;
headA = headA->next;
headB = headB->next;
}
return true;
}