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

链表的回文结构

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;
    }
};

全部评论

相关推荐

牛客969571862号:昨天捞我今天面这个,岗位一模一样,感觉就是面着玩
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务