题解 | #链表的回文结构#

链表的回文结构

https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        // write code here
         ListNode* first = A, * second = A;
	     ListNode* pos = NULL;
	while (first->next != NULL)
	{
		first = first->next;
	}
	first->next = A;
	//根据回文函数的对称性解题
	while (second != first)
	{  //直到双指针相遇
		if (second->val != first->val)
		{//对称性比较
			return false;
	    }
		pos = first;         //固定检查过节点
		first = first->next;  
		while (first->next != pos) //寻找下一个节点
		{
			first = first->next;
		}
		if (first != second)
		{
			second = second->next;
		}
	}
	return true;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务