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

电商网站建设开发维护苏州做网站的公司哪家最好

电商网站建设开发维护,苏州做网站的公司哪家最好,建立一个个人网站,鹤岗北京网站建设链表的回文结构 一.链表的中间节点思路1:暴力求解思路2:快慢指针 二.返回倒数第k个节点思路1:暴力求解思路2:快慢指针 三.反转链表思路1:头插法思路2:反转指针的指向 四.链表的回文结构思路1:利…

链表的回文结构

  • 一.链表的中间节点
    • 思路1:暴力求解
    • 思路2:快慢指针
  • 二.返回倒数第k个节点
    • 思路1:暴力求解
    • 思路2:快慢指针
  • 三.反转链表
    • 思路1:头插法
    • 思路2:反转指针的指向
  • 四.链表的回文结构
    • 思路1:利用数组,判断是否回文
    • 思路2:求链表的中间节点+反转链表

要解决链表的回文结构:首先需要求中间节点,其次是会反转链表。

一.链表的中间节点

链表的中间节点
在这里插入图片描述

思路1:暴力求解

  1. 求出链表的长度。
  2. 求出要返回的中间节点的位置(除2+1),遍历链表返回节点指针即可。
  3. 注意:兼容奇数个节点与偶数个节点。
typedef struct ListNode ListNode;struct ListNode* middleNode(struct ListNode* head) 
{ListNode* cur = head;int listLength = 0; while(cur){//求链表的长度listLength++;cur = cur->next;}//链表中间节点的位置int middle = listLength / 2 + 1;int i = 1; //注意:非i=0cur = head;while(i < middle){i++;cur = cur->next;}return cur;
}

思路2:快慢指针

  1. 定义两个指针fast、slow保存链表头节点的地址。
  2. 进入循环,fast指针一次走两个节点,slow指针一次走一个节点,当fast != NULL && fast->next != NULL时循环继续,否则循环结束。

情况1.含有奇数个节点
在这里插入图片描述

情况2.含有偶数个节点

在这里插入图片描述

typedef struct ListNode ListNode;struct ListNode* middleNode(struct ListNode* head)
{//快慢指针:慢指针一次走一步,快指针一次走两步ListNode* fast = head;ListNode* slow = head;//注意循环继续的条件是&&而不是||,且fast与fast->next的位置不能交换while (fast != NULL && fast->next != NULL){fast = fast->next->next;slow = slow->next;}return slow;
}

二.返回倒数第k个节点

返回倒数第k个节点

在这里插入图片描述

思路1:暴力求解

  1. 遍历链表求链表的长度length
  2. 倒数第k个节点,等价于从前往后的第length - k个节点。
  3. 再次遍历链表找到第length - k个节点,返回节点指针即可。

在这里插入图片描述

typedef struct ListNode ListNode;int kthToLast(struct ListNode* head, int k)
{//1.遍历链表求出链表长度,再遍历一次链表,找到返回值int size = 0;ListNode* cur = head;while(cur){size++;cur = cur->next;}int i = 0;cur = head;while(i < size - k){cur = cur->next;i++;}return cur->val;
}

思路2:快慢指针

  1. 定义两个指针fast、slow保存链表头节点的地址。
  2. fast指针先走k个节点
  3. 进入循环,fast与slow指针各自每次走一个节点,当fast != NULL时循环继续,否则循环结束。

在这里插入图片描述

typedef struct ListNode ListNode;int kthToLast(struct ListNode* head, int k)
{//2.快慢指针:快指针先走k步,然后快指针一次走一步,慢指针一次走一步ListNode* fast = head;ListNode* slow = head;for (int i = 0; i < k; i++){fast = fast->next;}while (fast != NULL){fast = fast->next;slow = slow->next;}return slow->val;
}

三.反转链表

反转链表

思路1:头插法

  1. 创建新链表 newHead = NULL。
  2. 遍历原链表,逐个节点头插倒新链表中。

在这里插入图片描述

typedef struct ListNode ListNode;struct ListNode* reverseList(struct ListNode* head) 
{//1.创建新链表,遍历原链表,逐个头插ListNode* newHead = NULL, *cur = head;while(cur){//头插ListNode* next = cur->next;cur->next = newHead;newHead = cur;cur = next;}return newHead;
}

思路2:反转指针的指向

在这里插入图片描述

typedef struct ListNode ListNode;struct ListNode* reverseList(struct ListNode* head) 
{//2.创建三个指针,反转指针的指向if(head == NULL){return NULL;}ListNode* n1 = NULL, *n2 = head, *n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3 != NULL){n3 = n3->next;}   }return n1;
}

四.链表的回文结构

链表的回文结构

思路1:利用数组,判断是否回文

class PalindromeList {
public://判断数组是否满足回文结构bool isReverse(int arr[], int left, int right){while(left < right){if(arr[left] != arr[right]){return false;}left++;right--;}return true;}bool chkPalindrome(ListNode* A){int arr[900];ListNode* cur = A;int i = 0, listLength = 0;while(cur){arr[i++] = cur->val;//将链表中的值保存到数组中cur = cur->next;listLength++;//求链表的长度}return isReverse(arr, 0, listLength - 1);}
};

思路2:求链表的中间节点+反转链表

  1. 寻找链表的中间节点 mid。
  2. 将中间节点 mid 以及之后的节点组成的链表反转。
  3. 遍历反转后的链表,当一个一个与原链表的数据域对比,若相同则是回文结构。

情况1.含有奇数个节点:
在这里插入图片描述
情况2.含有偶数个节点:

在这里插入图片描述

class PalindromeList {
public:ListNode* findMidNode(ListNode* phead){ListNode* fast = phead;ListNode* slow = phead;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;}ListNode* reverseList(ListNode* phead){ListNode* n1, *n2, *n3;n1 = NULL, n2 = phead, n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3 != NULL){n3 = n3->next;}         }return n1;}bool chkPalindrome(ListNode* A) {//1.找链表的中间节点ListNode* mid = findMidNode(A);//2.反转中间节点以及之后的节点组成的链表ListNode* right = reverseList(mid);//3.遍历反转链表,与原链表进制值的比较ListNode* left = A;while(right){if(right->val != left->val){return false;}right = right->next;left = left->next;}return true;}
};
http://www.yayakq.cn/news/226555/

相关文章:

  • 商城网站源文件下载做视频搬运哪个网站最赚钱
  • 潮州哪里有做网站微信公众号直接上传wordpress
  • 做外贸需要英文网站安化建设局网站
  • 做网站要学些什么软件如何在公司系统建网站
  • 著名网站建设wordpress采集主题
  • 手机网站怎么做沉浸式轻量云做网站怎么样
  • 网站建设步骤流程详细介绍做fitting的网站
  • 个人网站命名 备案网站架构设计图怎么做
  • 北京网站设计开发公司做论坛网站怎么赚钱
  • 文秘写作网站赣州市赣县区建设局网站
  • 有趣网站建设无聊网站开发招标网
  • 哪里做网站做得好网站不备案什么意思
  • 网站服务器提供什么服务杭州直播app开发公司
  • 网站下方一般放什么网站导航网站建设多少钱
  • 网站备案单位查询系统河北网站备案注销
  • 行业网站的优势wordpress主题制作函数完整版
  • 网站聚合页面模板团购小程序制作多少钱
  • 杭州最便宜的网站建设百度seo快速排名优化
  • 网站建设及维护服务技术指标今天热搜前十名
  • 建设网站用外包模板可以上线吗做技术支持的网站有
  • 私人做网站建设个人简历范本
  • 建湖做网站的价格企业网站备案需要哪些资料
  • 购买主机可以做网站吗dede资讯类网站模板
  • 自己建网站程序公司简介模板及介绍
  • discuz 手机网站模板别墅装修公司排名前十强
  • 建设机械网站案例分析seo优化深圳
  • 中国专业的网站建设站长网站优点
  • 网站建设的原则有哪些内容十佳工业设计公司
  • 霍邱网站设计化妆品网站设计论文
  • 宁波高端品牌网站建设硬件开发和嵌入式的区别