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

常州网站建设公司方案奶茶网络营销策划方案

常州网站建设公司方案,奶茶网络营销策划方案,国外独立站建站,wordpress wp_loginout203.移除链表元素 题目链接 | 文档讲解 |视频讲解 : 链接 1.思路: 需要分情况讨论:删除的是头元素 删除的是非头元素 删除头元素,需要将头元素的下一个节点设置为新的头元素 删除非头元素,得知道当前元素以及当前元素的下一个节…

203.移除链表元素

题目链接 | 文档讲解 |视频讲解 : 链接

 1.思路:

  • 需要分情况讨论:删除的是头元素  删除的是非头元素

  • 删除头元素,需要将头元素的下一个节点设置为新的头元素

  • 删除非头元素,得知道当前元素以及当前元素的下一个节点,需要将前一个节点的指针指向当前元素的下一个数据

 2.代码:

public ListNode removeElements(ListNode head, int val) {//删除的是头元素的情况,// 1.需要判断head!=null,因为我们要比较首元素的值,避免出现空指针// 2.不可使用if, eg:7-7-7-7 val=7,使用if在这种情况下就会漏判断while(head!=null && head.val==val){head=head.next;}//指向头结点,充当前置节点ListNode cur=head;//需要判断当前元素以及下一个元素不为空,因为我们需要删除的其实是下一个节点while (cur!=null && cur.next!=null){if(cur.next.val==val){//前置节点指向下下一个节点cur.next=cur.next.next;}else {//指向下一个节点cur=cur.next;}}//返回的是链表的入口//不能返回cur,它只是一个辅助指针,最后可能指向null,并不能代表整个链表return head;}

1.思路2:

  •  定义一个pre虚拟指针,指向头结点

  •  定义一个cur指针,用于遍历数组,寻找符合条件的数据,并且它一开始指向的是pre,实际要删除的数据是cur.next

  •  指向pre,这样删除头结点和删除非头结点的操作保持一样

2.代码

   public ListNode removeElements(ListNode head, int val) {//定义一个前置节点ListNode pre=new ListNode();//前置节点的指针指向头节点pre.next=head;//当前节点指向前置节点ListNode cur=pre;//为什么不判断cur,因为在这个结构下cur不会为null,因为初始值是虚拟头节点,且每次循环都可以保证cur!=null//我们其实关注的是cur.next,而不是curwhile(cur.next!=null){if(cur.next.val==val){cur.next=cur.next.next;}else{cur=cur.next;}}//返回链表的入口,即虚拟节点的下一个return pre.next;}

707.设计链表

题目链接 | 文档讲解 |视频讲解:链接

 1.思路:

  • 定义了一个虚拟节点DummyHead,统一新增和删除操作
  • index是从0开始的,它指的是第一个有效节点,不包含虚拟节点
  • 在index位置新增和删除元素时,需要找到的操作元素的前一个元素,我们遍历寻找的时候是从虚拟节点开始的,所以index-1处就是前一个元素,注意链表size的变化

       ①向头部添元素:新节点指针指向真实头节点,虚拟头节点指针指向新新节点

       ②向index(从0开始)位置添加元素:

              <1>首先判断下标的有效性 (链表有效区间 [0,size-1],但是插入元素时,=size是有效区间相当于尾部插入元素)无效区间 <0 || >size))

               <2>定义一个指针cur,for循环([0,index-1])找到index-1的位置,节点指针变更

               <3>【注】size++

        ③向尾部添加元素:

              <1>定义一个指针cur,找到尾部节点 while循环判断的是(cur.next!=null)

              <2>修改节点的指针

              <3>size++

        ④删除index(从0开始)位置元素:  

              <1>先判断index的有效性(链表有效区间 [0,size-1])

              <2>循环遍历到index-1的位置,指针进行交换

              <3>size--

 2.代码:

class MyLinkedList {//1.定义一个指针class LinkedNode{int val;LinkedNode next;LinkedNode(){} LinkedNode(int val){this.val=val;}}//1.链表的个数private int size;//2.虚拟头结点private LinkedNode head;public MyLinkedList() {this.size = 0;//创建虚拟节点,真实头结点是head.nextthis.head = new LinkedNode(0);}//获取链表中某个元素 index从0开始,且指向的是有效的链表节点,不包含虚拟节点public int get(int index) {//先判断下标是否是有效的,下标是从0开始的,所以链表的长度是size-1if(index<0 || index>=size){return -1;}//定义一个指针指向虚拟头节点LinkedNode cur=head;for(int i=0;i<=index;i++){//指针后移cur=cur.next;}return cur.val; }//在头部添加元素public void addAtHead(int val) {//定义一个节点LinkedNode newNode=new LinkedNode(val);//先将新节点的指针指向虚拟头结点的下一个即链表的真实头节点newNode.next=head.next;//虚拟头节点指向新节点head.next=newNode;size++;}//在尾部添加元素public void addAtTail(int val) {//定义一个新节点LinkedNode newNode =new LinkedNode(val);//定义一个指针指向头节点LinkedNode cur=head;//判断的是cur.nextwhile(cur.next!=null){cur=cur.next;}//尾节点指向新节点cur.next=newNode;//节点个数++size++;}//将一个值为 val 的节点插入到链表中下标为 index 的节点之前public void addAtIndex(int index, int val) {//【注】判断下标的合理性,链表的有效下标是[0,index-1],所以index=size时,相当于尾部添加元素if(index<0 || index >size){return;}LinkedNode newNode =new LinkedNode(val);//从虚拟节点开始移动//dummyhead -1-2-3-null 假设index=1,要在2元的前面新增节点,所以cur指针要指向的是元素1LinkedNode cur=head;//【注】index区间[0,index-1]for(int i=0;i<index;i++){cur=cur.next;}newNode.next=cur.next;cur.next=newNode;size++;}//删除某个元素public void deleteAtIndex(int index) {//判断下标的合理性if(index<0 || index >=size){return;}LinkedNode cur=head;//因为有虚拟头节点,所以不用对index=0的情况进行特殊处理//【注】从0开始,有效下标是[0,index-1],找到的是其前置节点for(int i=0;i<index;i++){cur=cur.next;}//找到当前节点cur,指针指向当前节点的下一个cur.next=cur.next.next;size--;}
}/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList obj = new MyLinkedList();* int param_1 = obj.get(index);* obj.addAtHead(val);* obj.addAtTail(val);* obj.addAtIndex(index,val);* obj.deleteAtIndex(index);*/

206.反转链表

题目链接 | 文档讲解 |视频讲解:链接

 1.思路:反转链表,需要将原先的首节点变成尾节点,首节点的指针指向null,原先的尾节点成为首节点,中间节点的各个指针指向其上一个元素。采用 快慢指针实现

  •  首先需要定义一个新的节点pre=null,充当慢指针

  •   定义一个cur指针,开始指向首节点,充当快指针

  •   这两个指针形成快慢指针,cur指针总是比pre指针快一步,pre是cur前置节点,要将cur指针的方向反转指向pre

  •   while循环操作中,因为要修改cur指针的方向,所以我们要先将cur指向的下一个节点先记录下来,方便后续cur指针的后移,

  •  在进行翻转,慢指针先后移,快指针在后移

  •  最终返回pre,因为我们返回的是链表的入口,此时cur指向了null,而pre才是指向反转链表后的首节点  

 2.代码:

public ListNode reverseList(ListNode head) {//1.定义一个新节点,充当慢指针ListNode pre =null;//定义cur指针,充当快指针ListNode cur=head;while(cur!=null){//记录当前节点的下一个,方便下面cur的后移ListNode next =cur.next;//指针指向前置节点,指针反转cur.next=pre;//pre先指向cur,不可与下一步调转,调转后,快慢指针指向了同一个节点pre=cur;//cur后移,指向当前节点的下一个cur=next;}//返回链表的入口,此时cur指向null,pre指向原链表尾节点,也就是反转后的首节点return pre;
}

总结:链表中,移除某个元素或者添加某个元素,新增一个虚拟头结点来统一操作,我们需要找到的是其前置节点,注意链表个数的变化,循环的判断条件

         反转操作:采用快慢指针


文章转载自:
http://gemology.jnpq.cn
http://commodiously.jnpq.cn
http://potherb.jnpq.cn
http://seaside.jnpq.cn
http://seamstress.jnpq.cn
http://ethnogeny.jnpq.cn
http://licensor.jnpq.cn
http://lumbermill.jnpq.cn
http://semisocialist.jnpq.cn
http://ctn.jnpq.cn
http://dahabeeyah.jnpq.cn
http://colonist.jnpq.cn
http://animating.jnpq.cn
http://langlaufer.jnpq.cn
http://dramatic.jnpq.cn
http://span.jnpq.cn
http://imitability.jnpq.cn
http://floorward.jnpq.cn
http://hybridize.jnpq.cn
http://nore.jnpq.cn
http://choreodrama.jnpq.cn
http://ethnographer.jnpq.cn
http://cerotic.jnpq.cn
http://endangeitis.jnpq.cn
http://reappear.jnpq.cn
http://isoglucose.jnpq.cn
http://visitandine.jnpq.cn
http://saipan.jnpq.cn
http://issuable.jnpq.cn
http://humanities.jnpq.cn
http://huckaback.jnpq.cn
http://gelatinate.jnpq.cn
http://hagberry.jnpq.cn
http://lack.jnpq.cn
http://smoggy.jnpq.cn
http://caducity.jnpq.cn
http://primidone.jnpq.cn
http://rawish.jnpq.cn
http://novelese.jnpq.cn
http://aqualung.jnpq.cn
http://allophane.jnpq.cn
http://laibach.jnpq.cn
http://negotiation.jnpq.cn
http://genuflection.jnpq.cn
http://christy.jnpq.cn
http://countershading.jnpq.cn
http://unmarriageable.jnpq.cn
http://nival.jnpq.cn
http://zengakuren.jnpq.cn
http://unbeautiful.jnpq.cn
http://sensuality.jnpq.cn
http://maud.jnpq.cn
http://micrometry.jnpq.cn
http://condenser.jnpq.cn
http://bologna.jnpq.cn
http://strobe.jnpq.cn
http://underofficer.jnpq.cn
http://fruitwood.jnpq.cn
http://authorware.jnpq.cn
http://catholicate.jnpq.cn
http://oblong.jnpq.cn
http://hyperpyrexia.jnpq.cn
http://pharmaceutic.jnpq.cn
http://laceless.jnpq.cn
http://neuroregulator.jnpq.cn
http://surrejoinder.jnpq.cn
http://underwrote.jnpq.cn
http://velaria.jnpq.cn
http://niccolite.jnpq.cn
http://aluminite.jnpq.cn
http://saccharolytic.jnpq.cn
http://landscapist.jnpq.cn
http://amphicoelian.jnpq.cn
http://lepidopterological.jnpq.cn
http://teethe.jnpq.cn
http://lymphoma.jnpq.cn
http://idoneousness.jnpq.cn
http://minster.jnpq.cn
http://eighty.jnpq.cn
http://curtail.jnpq.cn
http://masculine.jnpq.cn
http://componential.jnpq.cn
http://aplanatic.jnpq.cn
http://plazolite.jnpq.cn
http://purulent.jnpq.cn
http://pornie.jnpq.cn
http://resume.jnpq.cn
http://pillar.jnpq.cn
http://hatching.jnpq.cn
http://transbus.jnpq.cn
http://commemorate.jnpq.cn
http://negrophil.jnpq.cn
http://noway.jnpq.cn
http://nonuse.jnpq.cn
http://farmost.jnpq.cn
http://apologete.jnpq.cn
http://homoiothermal.jnpq.cn
http://affiant.jnpq.cn
http://hocky.jnpq.cn
http://cowhand.jnpq.cn
http://www.hrbkazy.com/news/73663.html

相关文章:

  • 怎么把网站做的更好网站是怎么优化推广的
  • 杭州江干建设局网站宁波百度seo排名优化
  • 电脑网站兼职在哪里做优化营商环境建议
  • 环评在那个网站做学网络营销去哪个学校
  • 湖北建设局网站首页常见的营销方式有哪些
  • 自己做鞋子网站宁波网站制作设计
  • 沈阳网站设计开发赣州seo唐三
  • 能够做二维码网站青岛seo整站优化哪家专业
  • 网站pc和手机端分离怎么做直通车怎么开效果最佳
  • 网站举报有奖平台互联网推广员是做什么的
  • 网站建设 软件有哪些方面百度seo搜索引擎优化方案
  • 西充建设部门投诉网站兰州网络优化seo
  • 郑州网站维护社群营销
  • 一般公路建设招投标在什么网站上代运营哪家公司最靠谱
  • 零食网站怎么做关键词排名方法
  • 一个域名建多个网站seo网站培训班
  • 做网站 怎么备案比百度还强大的搜索引擎
  • 网站开发嘉比格网络成功的网络营销案例ppt
  • google网站建设网推团队
  • 17网站一起做网店后台站长之家网站排行榜
  • 网站关键字优化公司app优化
  • 网站做关键词排名每天要做什么百度搜索推广和信息流推广
  • pc端网站设计规范营销策划的概念
  • web怎么做网站网站关键词排名
  • mvc网站开发 案例视频百度网盘电脑网页版
  • 金华网抖音搜索seo
  • 阿里云 网站部署免费网站电视剧全免费
  • 青岛 网站备案seo算法是什么
  • 贵阳网页设计培训seo排名优化什么意思
  • 金坛做网站哪家好网络服务合同