【2024考研】题解10 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ #include <algorithm> #include <iterator> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 the head * @return bool布尔型 */ bool isPail(ListNode* head) { // write code here //链表元素赋值到正向数组内 vector <int> pos; while(head != NULL){ pos.push_back(head->val); head = head->next; } //置换颠倒数组变成反向数组 vector <int> neg = pos; reverse(neg.begin(),neg.end()); for(int i = 0; i < neg.size(); i++){ cout<<neg[i]; } //比较正反两个数组遍历结果是否一样 for(int i = 0; i < neg.size(); i++){ cout<<neg[i]; if(pos[i] != neg[i]) return false; } return true; } };
- 这段代码的时间复杂度为O(n),其中n是链表的长度。代码首先将链表的元素赋值到正向数组`pos`中,然后通过`reverse`函数将`pos`数组颠倒得到反向数组`neg`,最后比较正反两个数组的遍历结果是否一样。
- 空间复杂度为O(n),其中n是链表的长度。代码使用了两个数组`pos`和`neg`来存储链表的元素。
- 算法思想是将链表的元素存储到数组中,然后通过反转数组的方式得到反向数组,最后比较正反两个数组的遍历结果是否一样,从而判断链表是否是回文的。
2024考研数据结构 文章被收录于专栏
本人考研刷算法题,立此专栏练习强化。