当前位置: 首页 > wzjs >正文

云南网站建设网站运营有需要网站建设的没

云南网站建设网站运营,有需要网站建设的没,前端网站开发总结,上海外贸服装一条街前言 简单 √ 是反转链表的衍生题,很快写完了。不过没考虑到恢复链表结构的问题。 题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输…

前言

简单 √ 是反转链表的衍生题,很快写完了。不过没考虑到恢复链表结构的问题。

题目

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105] 内
  • 0 <= Node.val <= 9

进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

思路

一开始想着把链表直接反转存储,然后同时遍历。但是考虑到题目要求的O(1)空间复杂度,想到可以只把前半部分,从中间开始向两边遍历。如果链表长度为奇数,跳过最中间的那个数。

我的题解

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:bool isPalindrome(ListNode* head) {if (!head || !head->next){return true;}//链表长度ListNode* node = head;int count = 1;while (node->next){node = node->next;count++;}//反转一半的链表,分奇偶两种情况int len = count / 2;ListNode* pre = nullptr;ListNode* cur = head;while (len--){ListNode* nextnode = cur->next;cur->next = pre;pre = cur;cur = nextnode;}ListNode* left = pre;ListNode* right = cur;if (count % 2 != 0){right = right->next;}//左右同时开始遍历while (left && right){if (left->val != right->val){return false;}left = left->next;right = right->next;}return true;}
};

官方题解

将值复制到数组中后用双指针法

  1. 复制链表值到数组列表中。
  2. 使用双指针法判断是否为回文。
class Solution {
public:bool isPalindrome(ListNode* head) {vector<int> vals;while (head != nullptr) {vals.emplace_back(head->val);head = head->next;}for (int i = 0, j = (int)vals.size() - 1; i < j; ++i, --j) {if (vals[i] != vals[j]) {return false;}}return true;}
};

快慢指针

  1. 找到前半部分链表的尾节点。
  2. 反转后半部分链表。
  3. 判断是否回文。
  4. 恢复链表。
  5. 返回结果。

跟笔者思路差不多,不过多了还原链表结构的步骤

class Solution {
public:bool isPalindrome(ListNode* head) {if (head == nullptr) {return true;}// 找到前半部分链表的尾节点并反转后半部分链表ListNode* firstHalfEnd = endOfFirstHalf(head);ListNode* secondHalfStart = reverseList(firstHalfEnd->next);// 判断是否回文ListNode* p1 = head;ListNode* p2 = secondHalfStart;bool result = true;while (result && p2 != nullptr) {if (p1->val != p2->val) {result = false;}p1 = p1->next;p2 = p2->next;}        // 还原链表并返回结果firstHalfEnd->next = reverseList(secondHalfStart);return result;}ListNode* reverseList(ListNode* head) {ListNode* prev = nullptr;ListNode* curr = head;while (curr != nullptr) {ListNode* nextTemp = curr->next;curr->next = prev;prev = curr;curr = nextTemp;}return prev;}ListNode* endOfFirstHalf(ListNode* head) {ListNode* fast = head;ListNode* slow = head;while (fast->next != nullptr && fast->next->next != nullptr) {fast = fast->next->next;slow = slow->next;}return slow;}
};

心得

有了反转链表的基础,思路就很快想到了。一半反转,同时遍历即可。但是笔者没考虑到还原链表结构,这里暴露出笔者缺乏全局思考,代码拓展性的问题,纯粹是为了做题而做题,有点丢了本心,警醒!另外,反转链表还有个缺点就是需要锁定整个链表来解答,对于系统也不友好。最后,这里再加一个用栈的做法,比数组的做法更好,不过不是O(1)空间复杂度。


文章转载自:

http://5zn1wmmQ.npfkw.cn
http://zmhQuvmU.npfkw.cn
http://sp1J9w6c.npfkw.cn
http://DoqwlEJK.npfkw.cn
http://OzJuxYWD.npfkw.cn
http://Y4dT8l0n.npfkw.cn
http://OfKXoWwp.npfkw.cn
http://KL3On9on.npfkw.cn
http://u69HBvRC.npfkw.cn
http://K6gdwF8O.npfkw.cn
http://PHxj6Z8Y.npfkw.cn
http://Xp4gJ4No.npfkw.cn
http://lYFXfimu.npfkw.cn
http://ZrucvqcU.npfkw.cn
http://6nNjOuLy.npfkw.cn
http://dtEpYcq4.npfkw.cn
http://Gz8W6qTo.npfkw.cn
http://fysaaWVe.npfkw.cn
http://iF6fTQ1x.npfkw.cn
http://v30IrLCt.npfkw.cn
http://ExDCeeQO.npfkw.cn
http://hIrX8t4W.npfkw.cn
http://CbYOBuBR.npfkw.cn
http://ChF4JAtV.npfkw.cn
http://Lb7weM1w.npfkw.cn
http://pZwTIzZB.npfkw.cn
http://OcltEuH0.npfkw.cn
http://f8mDpEkV.npfkw.cn
http://ljHFgb55.npfkw.cn
http://QkywHufK.npfkw.cn
http://www.dtcms.com/wzjs/674241.html

相关文章:

  • icp网站备案查询杭州网站关键词排名
  • 做网站用哪个预装系统金耀网站建设网站制作
  • 自己用iis怎么建设网站建设网站需求文档
  • 江门站官网免费做橙光封面的网站
  • 网站开发技术留言什么是网站易用性
  • 在云服务器上搭建网站学物联网工程后悔死了
  • 萧山网站建设xssem专业网站建设市场分析
  • 网站开发研究生企业如何开展网络营销
  • 网站开发提供图片加载速度wordpress自适应 slide
  • 网站设置二级域名好吗如何制作wordpress网站地图
  • 做任务网站排行榜大专网站建设的论文范文
  • 用三权重的网站做友链有好处没毕业设计和论文网站
  • 专业上海网站建设公司哪家好制作短视频的软件有哪些
  • 设计网站费用女性开源网站
  • 内蒙住房和城乡建设部网站莱芜受欢迎的网站建设
  • 做联轴器的网站个人网站可以收费吗
  • 网站建设及经营应解决好的问题书籍页面设计模板
  • 手机网站开发怎么样网站开发环境及工具
  • 阿里云空间部署网站网站开发 外包
  • 常州自助做网站北京开网站建设公司
  • 网站开发文档带er图wordpress傻瓜建站教程
  • 与网站开发相关的书籍系统建站
  • 棋牌网站哪里做火星建站免费wap自助建站
  • 丽水网站制作公司企业微信网站开发公司
  • 网站统计哪个好用招聘模板图片
  • 微信开发网站开发未来前景做cpa网站
  • 外发加工网站炒股配资网站建设
  • 手机网站切图哪些域名不能够做淘宝客网站
  • 动漫电影做英语教学视频网站网站ui界面设计模板
  • 寻花问柳-专注做一家男人的网站猪做网站业务提成多少