题解 | #链表的回文结构#
链表的回文结构
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) { int arr[900]={0}; ListNode *pcur=A; int i=0; while(pcur)//遍历原链表,pcur不能为空 { //将链表中每个节点的值放到arr中 arr[i]=pcur->val; i++; pcur=pcur->next;//换下一个节点 } //i即节点的个数,因为我们的i一直在进行++操作 //找中间节点,判断是否为回文数字 int left=0; int right=i-1;//i是数组中数据的有效个数 //我们比较left和right的下标的数字的大小,相等的话我们就让两个指针一直走,直到遍历整个数组 while(left<right) { if(arr[left]!=arr[right]) { //那么肯定不是回文结构 return false; } right--; left++; } //说明是回文结构,因为已经跳出循环了 return true; } };