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

多语种网站制作市场调研公司收费标准

多语种网站制作,市场调研公司收费标准,网站建设的学校,188旅游网站源码下载目录 一、前言 二、题目描述 三、解题方法 ⭐ 头插法 --- 创建新的链表 ⭐ 迭代法 --- 三指针 ⭐ 递归法 四、总结与提炼 五、共勉 一、前言 反转链表这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目&…

目录

一、前言

二、题目描述 

三、解题方法

 ⭐ 头插法 --- 创建新的链表

 ⭐ 迭代法 --- 三指针

 ⭐ 递归法

四、总结与提炼

五、共勉


一、前言

       反转链表这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会要求我们写出多种解法来实现这道题目,所以大家需要对这道题目非常熟悉哦!!
      本片博客就来详细的讲讲解一下 反转链表的多种实现方法,让我们的面试变的更加顺利!!!

二、题目描述 

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

 三、解题方法

 ⭐ 头插法 --- 创建新的链表

        头插这种方法,就是将结点一一地插入到新链表的头前,所以我们需要先去建立出一个新的链表头,也就是我下面的这个【rhead】,通过去遍历原先的链表将这些结点一一转移过去即可

  • 定义三个 变量 cur 、newnode 、rhead 
  • cur :用于遍历整个旧链表          newnode :用于记录cur的下一个节点,防止旧链表找不到
  • rhead :新链表的头节点
// 重新创建一个链表,将之前的链表进行头插即可
struct ListNode* rphead = NULL;
// 进行指针变换
struct ListNode* cur = head;

  •  开始头插,cur 节点的 next 指向 rhead 节点,然后更新 rhead 、cur 、newnode 这三个节点
 // 用于保存下一个节点地址struct ListNode* newnode = cur->next;// 头插cur->next = rphead;rphead = cur;cur = newnode;

  •  继续同样的操作

  • 此时当【cur == NULL】时,便结束一个遍历,然后新链表的头就是【rhead】,返回即可

 完整代码:

struct ListNode* reverseList(struct ListNode* head)
{// 重新创建一个链表,将之前的链表进行头插即可struct ListNode* rphead = nullptr;// 进行指针变换struct ListNode* cur = head;while(cur!=NULL){// 用于保存下一个节点地址struct ListNode* newnode = cur->next;// 头插cur->next = rphead;rphead = cur;cur = newnode;}return rphead;
}

 ⭐ 迭代法 --- 三指针

         三指针的迭代方法,这种方法不需要在去创建一个新的头结点指针只需要在原先的链表上进行一个操作即可,也就是定义三个指针。

  • cur:指向当前链表的头
  • nextnode:指向cur的next,一样是用于保存。
  • prev:这个的话其实是用来算作链表最后一个结点指向空的。
ListNode* prev = nullptr;
ListNode* cur = head;
ListNode* nextNode = cur->next;

  • 然后将【cur->next = prev】,让原本的头【cur】作为反转后新链表的尾巴

  • 接着就是进行的一个迭代操作,首先将【cur】当前的值给到【prev】,然后将【nextnode】当前的值给到【cur】,然后让【nextnode】继续向下,这个时候其实就进行了一个迭代的操作
  • cur->next = prev;
    prev = cur;
    cur = nextnode;
  • 然后继续做翻转,让【cur->next】指向 prev, 并更新三个指针

  • 可以看到,当这个【cur == NULL】时,整个链表便完成了一个翻转,此时便结束循环迭代的逻辑

  • 然后可以看到,此时新链表的头并不是【cur】,而是【prev】,所以最后应该返回【prev】

 完整代码:

class Solution {
public:ListNode* reverseList(ListNode* head) {// 1. 迭代法// 定义三个指针ListNode* prev = nullptr;      // cur 的前一个节点ListNode* cur = head;// 开始迭代while(cur!=nullptr){ListNode* nextnode = cur->next;  // cur的下一个指针cur->next = prev;prev = cur;cur = nextnode;}return prev;}
};

 ⭐ 递归法

我们可以通过迭代的方法来得到递归方法 

  • 函数声明中 prev 指针指向的为 NULLcur 指针指向的为 head,正如递归中声明并初始化的prev cur 指针
  • 递归结束条件为 curNULL, 返回 prev
  • 同样 newnode 保存 cur 的下一个节点,以防止反转时丢失链表信息。
  • 然后进行反转 cur->next = prev;
  • prev为当前已反转部分的头节点,cur为当前待反转的节点。
  • 然后调用递归,将cur作为新的 prev 传入下一层,将 newnode 作为新的 cur 传入下一层。
  • 实现了链表的递归反转
class Solution {
public:ListNode* reverse(ListNode* prev, ListNode* cur){// 最终结束条件if(cur==nullptr){return prev;}ListNode* newnode =cur->next;cur->next = prev;// 将 cur 作为 prev 传入下一层// 将 newnode 作为 cur 传入下一层,改变其指针指向当前 curreturn reverse(cur,newnode);}ListNode* reverseList(ListNode* head) {// 3. 递归法return reverse(nullptr,head);}
};

 四、总结与提炼

         最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关链表翻转的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握

 五、共勉

       以下就是我对 反转链表 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!!    

http://www.yayakq.cn/news/266413/

相关文章:

  • 深圳网站制作需要多少钱安徽省建设部网站官网
  • wamp做的网站外网怎么访问自助建站免费自助建站网站
  • 网站推广解释网站建设方案书范本
  • 地推是什么意思网站运行速度优化
  • 网站开发安全文档怎么打开wordpress后台
  • 制冷 网站建设 中企动力广州游戏软件开发公司
  • 学校网站建设考评办法邢台专业做网站推广
  • 做微商有什么好的货源网站wordpress增加404
  • 网站开发切换电脑版与手机版校园网站建设培训简讯
  • 做网站去除视频广告泰安网络推广seo
  • 最专业的医疗网站建设wordpress 分类目录 路径
  • 网站设计的用途开源免费企业网站系统
  • 网站图片管理系统楼盘网站建设案例
  • 南通网站定制公司什么是网站建设规划书
  • 仿70网站分类目录源码建设职业注册中心网站
  • 光山网站建设中国十大文旅策划公司
  • 怎么注册建设公司网站做网站需要什么配置
  • 荆州企业网站建设seo网站关键词优化多少钱
  • 网站免费源码大全不用下载大型网站建站公司 上市
  • 国外做外贸哪个网站好些免费商城网站建设平台
  • 搭建自己的网站需要什么开源网站程序
  • 360建站系统手机黄山网站
  • 网站建设淘宝客模板下载wordpress the loop
  • 南宁3及分销网站制作站建设培训学校
  • 网站建设的盈利性和非盈利性四川住房和城乡建设厅网站首页
  • 猪肉价格最新消息南宁企业网站seo
  • 优斗士做网站怎么样一个小胖子从网站做任务的网站故事
  • 网站建设教程搭建芽嘱湖南岚鸿信赖推广平台大全
  • 广州企业网站建设费用番禺手机网站建设
  • 西安正规网站建设报价wordpress 2019主题谷歌字体