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

赚钱一天赚300到500平台山西seo基础教程

赚钱一天赚300到500平台,山西seo基础教程,wordpress 4.7.2 提权,医疗网站建设回文链表 题目链接 回文结构即字符串正序逆序完全一致,如“1 2 3 4 3 2 1”,那么我们就要想办法同时比较链表头和链表尾的元素,看其是否相等。 下面介绍一种最常用的方法: 思路 如果我们仔细观察回文结构,就会得到一…

回文链表

题目链接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvuT2cBE-1691217006189)(C:/Users/HUASHUO/AppData/Roaming/Typora/typora-user-images/image-20230805111025312.png)]

回文结构即字符串正序逆序完全一致,如“1 2 3 4 3 2 1”,那么我们就要想办法同时比较链表头和链表尾的元素,看其是否相等。

下面介绍一种最常用的方法:


思路

如果我们仔细观察回文结构,就会得到一个结论:

将一个回文结构从正中间分隔,再将后半部分逆序,那么前半部分就一定等于后半部分。

我们可以分链表长度为奇数和偶数讨论:

当长度为偶数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJGE5AkL-1691217006190)(C:/Users/HUASHUO/AppData/Roaming/Typora/typora-user-images/image-20230805132642866.png)]

当长度为奇数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tnzqfbdq-1691217006190)(C:/Users/HUASHUO/AppData/Roaming/Typora/typora-user-images/image-20230805132749391.png)]

  • 那么**,第一步就先要得到链表的中间节点。我们可以用快慢指针**来实现:

定义两个指针fast、slow,同时指向链表头,slow每次走一个,fast每次走两个节点,当fast->next == NULL 或者 fast == NULL时,slow就走到中间节点了

struct ListNode* slow = head;
struct ListNode* fast = head;while (fast && fast->next)
{slow = slow->next;fast = fast->next->next;
}
  • 第二步,就是反转以slow节点为头的链表,如果对单链表反转还不太了解的朋友,建议先看看👉反转单链表
struct ListNode* reverseList(struct ListNode* head)
{if (head == NULL)return NULL;struct ListNode* newHead = (struct ListNode*)malloc(sizeof(struct ListNode));newHead->next = head;struct ListNode* cur = head;while (cur->next){struct ListNode* curNext = cur->next;cur->next = curNext->next;curNext->next = newHead->next;newHead->next = curNext;}struct ListNode* retHead = newHead->next;free(newHead);return retHead;
}
  • 第三步,我们用指针mid来接受slow后链表反转过后的头,接下来,从原来链表的头和mid开始比较,只要遇到不相等的情况,就返回false,否则返回true
struct ListNode* mid = reverseList(slow->next);
struct ListNode* cur1 = head;
struct ListNode* cur2 = mid;while (cur1 && cur2)
{if (cur1->val != cur2->val){return false;}cur1 = cur1->next;cur2 = cur2->next;
}return true;
  • 最后一步,**在返回之前,需要将链表还原,**毕竟在现实生活中,没有人想再调用这个函数时改变原来的链表结构。但是,如果我们就按上面的操作进行还原,那么就会出现一系列的问题,我们拿下图说明

判断过后,链表的结构是这样的:

如果我们要将链表还原,那么问号处的节点的后面应该链接到reverseList(mid)的返回值,但问题是之前我们并没有保存问号处的节点。所以,我们可以对找到链表中间节点这一操作进行改进:

struct ListNode* slow = head;
struct ListNode* fast = head;while (fast->next && fast->next->next)
{slow = slow->next;fast = fast->next->next;
}

这样slow就会停留在问号处的位置,反转链表的时候就反转以slow->next为头的链表就行了

实现代码

struct ListNode* reverseList(struct ListNode* head)	//反转链表
{if (head == NULL)return NULL;struct ListNode* newHead = (struct ListNode*)malloc(sizeof(struct ListNode));newHead->next = head;struct ListNode* cur = head;while (cur->next){struct ListNode* curNext = cur->next;cur->next = curNext->next;curNext->next = newHead->next;newHead->next = curNext;}struct ListNode* retHead = newHead->next;free(newHead);return retHead;
}bool isPalindrome(struct ListNode* head){struct ListNode* slow = head;struct ListNode* fast = head;while (fast->next && fast->next->next)	//找到中间节点的前一个节点{slow = slow->next;fast = fast->next->next;}//反转以中间节点为头的链表//将返回值赋给midstruct ListNode* mid = reverseList(slow->next);	struct ListNode* cur1 = head;struct ListNode* cur2 = mid;bool ret = true;	//设置返回值while (cur1 && cur2){if (cur1->val != cur2->val){ret = false;	//只要出现不相等的情况,就将返回值设为false,推出比较break;}cur1 = cur1->next;cur2 = cur2->next;}//还原链表mid = reverseList(mid);slow->next = mid;//返回return ret;
}
http://www.dinnco.com/news/39733.html

相关文章:

  • 苏州企业网站设计方案线上营销怎么做
  • 做淘宝客网站制作教程视频教程app推广方式有哪些
  • 个人如何免费建网站太原竞价托管公司推荐
  • html5开发环境seoul是什么品牌
  • 怎样做购物网站seo关键词优化最多可以添加几个词
  • 网站开发人员招聘软文写作经验
  • 网站建设的毕业设计选题管理系统保定百度seo公司
  • wordpress动漫主题曲杭州百度快照优化排名推广
  • 做网站建设需要做哪些工作怎么创建网站链接
  • 绵阳网络公司网站建设网站宣传
  • 域名停靠万网域名网站网站是怎么做的
  • 济南网站建设服务网站怎么优化
  • 网站浮动窗口怎么设置百度客服中心人工在线咨询
  • 服务器部署php网站柳州网站建设哪里有
  • vue做公司网站自己的网站怎么做seo
  • 建设局电工证与安监局电工证学seo哪个培训好
  • 模版免费网站互联网营销是什么
  • 开封哪里有做交友网站的seo首页排名优化
  • 网站需要去工信部做备案吗网站seo策划方案案例分析
  • 活体拍摄乐陵市seo关键词优化
  • 标志设计网站推荐百度收录查询方法
  • 开发公司物业移交物业协议seo搜索引擎优化工作内容
  • 电商网站搭建流程电子商务网站建设的步骤
  • 爱网站搭建关键词排名零芯互联关键词
  • 大连日文网站设计网站优化包括哪些
  • wordpress怎么搭建网站网络营销的方法包括哪些
  • 广东省建设信息网站成绩查询百度云网盘搜索引擎
  • 网站设计论文答辩问题南宁网站关键词推广
  • 充值网站建设接推广一般多少钱
  • 想学ui设计乐天seo培训中心