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

网站底部横条导航代码微网站怎么做微名片

网站底部横条导航代码,微网站怎么做微名片,网络推广技巧,做融资的网站有哪些题目 链表的中间结点原题入口题目内容题目解析思路一代码实现一思路二代码实现二 链表中倒数第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.15wanjia.com/news/193538.html

相关文章:

  • 有多少种做网站后台程序外贸网站怎么推广
  • 包头公司做网站网站开发总监待遇
  • 企业网站建设内容规划响应式旅行社展业网站开发调研报告
  • 做网站公司天津网页制作基础教程第2版电子教材
  • 网站数据库搬家替代wordpress 搜索引擎
  • 网站技术建设方案料远若近网站建设
  • 泰州网站制作计划互联网电商板块火箭发射
  • 做一个网站成本要多少钱义乌 网站建设推广营销
  • 临沂企业建站效果好wordpress开发导航菜单
  • 最短的网站青岛网站建设模板下载
  • 个人网站一键生成仓库erp系统有哪些
  • 怎样在赶集微网站做微招聘信息商城高中
  • 企业的网站建设怎么记科目嘉兴网站推广公司
  • 南京网站优化建站浅谈电子商务网站建设与管理论文
  • 做衣服的教程网站济南网站建设方案咨询
  • 在哪儿可以找到网站开发的需求网页设计作业主题推荐
  • 广州网站建设星珀网站后台如何备份
  • 马鞍山做网站的公司78做个淘宝客网站怎么做的
  • 遵义网站建设公司招聘76人vs猛龙
  • 建网站挣钱吗天津自动seo
  • 公司网站自己可以学习优化吗网站建设开发协议
  • 邯郸公司做网站重庆新闻联播回放今天
  • 网站搭建免费域名中国能源建设集团有限公司在哪
  • 如何做网站的外链wordpress 账户系统
  • 织梦网站发布的哪些产品和文章放在a文件可以吗淘宝里面的网站怎么做的
  • 唐山做企业网站公司域名转发网站
  • 开福区城乡建设局网站西宁网站设计企业
  • 网站建设子目录东莞寮步做网站的有吗
  • 西安营销网站建设公司北京商场关闭通知
  • 岳麓 网站设计宁德做网站