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

编程侠少儿编程官网淘宝seo优化排名

编程侠少儿编程官网,淘宝seo优化排名,成都微网站系统,个人网站建设心得题目 链表的中间结点原题入口题目内容题目解析思路一代码实现一思路二代码实现二 链表中倒数第k个结点题目链接题目内容思路代码实现 合并两个有序链表原题入口题目内容思路代码实现 反转链表题目传送入口题目内容思路一代码复现一思路二代码实现二 链表的中间结点 原题入口 …

题目

  • 链表的中间结点
    • 原题入口
    • 题目内容
    • 题目解析
      • 思路一
      • 代码实现一
      • 思路二
      • 代码实现二
  • 链表中倒数第k个结点
    • 题目链接
    • 题目内容
    • 思路
    • 代码实现
  • 合并两个有序链表
    • 原题入口
    • 题目内容
    • 思路
    • 代码实现
  • 反转链表
    • 题目传送入口
    • 题目内容
    • 思路一
    • 代码复现一
    • 思路二
    • 代码实现二

链表的中间结点

原题入口

题目内容

给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。

题目解析

该题我们选择一次遍历返回中间结点,可以选择两次遍历,只是时间复杂度变大了,这里介绍比较优的解法

思路一

该思路利用快慢指针的方法,快指针一次跳两个结点,慢指针一次跳一个结点,来实现中间的效果,此处中间的思想有了头绪,那么结束循环的条件又是我们要考虑的了,如果是奇数个结点,fast在最后一个结点停止,最后一个结点的next才等于NULL,奇数的结束条件是fast->next==NULL;就偶数而言,结束条件就是NULL

代码实现一

struct ListNode* middleNode(struct ListNode* head) 
{struct ListNode* fast=head,* slow=head;//可以简化代码,把slow去除,直接替换为headwhile(fast&&fast->next){slow=slow->next;fast=fast->next->next;}return slow;
}

思路二

核心思想是使用两个计数器 count 和 ret,通过遍历链表找到中间位置的节点。其中,通过判断 count / 2 + 1 > ret 来确定是否为中间位置。这样,当循环结束时,head 指向的节点即为链表的中间节点。

代码实现二

struct ListNode* middleNode(struct ListNode* head) 
{struct ListNode* tem = head;int count = 1,ret = 1;while(tem){        if(count/2+1>ret){head=head->next;ret++;}count++;        tem=tem->next;}return head;
}

链表中倒数第k个结点

题目链接

题目内容

输入一个链表,输出该链表中倒数第k个结点。

思路

快慢指针的思想,先让快指针走k步,然后快慢指针同时走,注意判断快指针是否越界

代码实现

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) 
{struct ListNode* p1=pListHead,* p2=pListHead;while(k--){if(p1==NULL) return NULL;p1=p1->next;}while(p1){p2=p2->next;p1=p1->next;}return p2;
}

合并两个有序链表

原题入口

题目内容

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

思路

类似两个有序数组合并,先考虑空链表的情况,再通过遍历两个有序链表一次,逐个比较节点的值,将较小的节点连接到合并链表中,最终得到合并后的有序链表。

代码实现

struct ListNode* mergeTwoLists(struct ListNode* list1, struct  ListNode* list2) 
{struct ListNode* head = NULL,* tail = NULL;if(list1==NULL) return list2;if(list2==NULL) return list1;while(list1&&list2){if(list1->val>list2->val){if(head==NULL){head=tail=list2;}else{tail->next=list2;tail=tail->next;}list2=list2->next;}else {if(head==NULL){head=tail=list1;}else{tail->next=list1;tail=tail->next;}   list1=list1->next;}}if(list1)tail->next=list1;if(list2)tail->next=list2;return head;
}

反转链表

题目传送入口

题目内容

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

思路一

在遍历链表的过程中,改变结点指向的方向,原题实例,如果将2的next指向1的话,你就丢失2之后的结点,所以我们要用3个指针**,前两个指针改变导向,第三个指针记录第二个指针的下一个位置**

代码复现一

struct ListNode* reverseList(struct ListNode* head) 
{    if(head==NULL) return NULL;struct ListNode* p1 = NULL;struct ListNode* p2 = head;struct ListNode* p3 = head->next;while(p2){p2->next = p1;p1=p2;p2=p3;if(p3)p3=p3->next;}return p1;
}

思路二

第二种思路与第一种比较相似,第二种采用尾插的方法来进行结点的逐个插入,仍旧采用三指针,前两个指针对结点尾插,第三个结点记录下一个结点的位置,防止失去与原链表的关联

代码实现二

struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* rhead = NULL, * cur = head;while (cur){struct ListNode* next = cur->next;cur->next = rhead;rhead = cur;cur = next;}return rhead;
}
http://www.hkea.cn/news/281750/

相关文章:

  • 糯米团网站怎么做微信软文范例100字
  • 如何在社交网站上做视频推广seo营销的概念
  • 大连做网站仟亿科技最新域名查询
  • 网站开发实施计划与安排宁波网络推广方式
  • 企业网站建设公司注意哪些问题软件开发外包公司
  • abc网站建设怎么样yandex引擎搜索入口
  • wordpress屏蔽f12广州seo网络优化公司
  • 南宁网站建设推广服务云服务器免费
  • 大数据营销是什么seo站长
  • 建设政府网站的公司乐山网站seo
  • 仿站容易还是建站容易专业做灰色关键词排名
  • 做网站背景音乐管理课程培训
  • 网站建设可以自学吗品牌软文范文
  • 网站风格对比哪里有学计算机培训班
  • 做mla的网站网站优化哪家好
  • 网站注册的账号怎么注销线上营销活动有哪些
  • 国内做进口的电商网站网站推广软件哪个好
  • 谁有做那事的网站百度投诉中心入口
  • 免费单页网站在线制作沈阳seo排名优化教程
  • 廊坊网站建大型网站建站公司
  • 远程桌面做网站sem和seo区别与联系
  • 做贷款网站优化大师有用吗
  • 有没有便宜的网站制作制作网页教程
  • 医院网站制作优化关键词的方法有哪些
  • wordpress安装到网站吗泰安seo
  • 长春网站开发培训价格google play三件套
  • 做生存分析的网站有哪些国外新闻最新消息
  • 济南网站优化收费百度互联网营销
  • bootstrap响应网站模板下载发帖推广百度首页
  • 动态网站上的查询怎么做新媒体运营培训学校