国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVASCRIPT算法(4)

GraphQuery / 748人閱讀

摘要:繼續(xù)學(xué)習(xí)鏈表的算法鏈接題目描述刪除單鏈表倒數(shù)第個節(jié)點(diǎn),,盡量在一次遍歷中完成。如果條件是,那么被刪除的點(diǎn)就是,但是這樣刪不掉。思路很相似,那么三分之一,四分之一,五分之一,或者均分三段,均分四段也是類似的想法。

繼續(xù)學(xué)習(xí)鏈表的算法鏈接

題目描述:刪除單鏈表倒數(shù)第 n 個節(jié)點(diǎn),1 <= n <= length,盡量在一次遍歷中完成。

分析:看到題目時的第一想法是先遍歷一次計(jì)算出單鏈表的長度 length,然后在遍歷第二次刪除第 length - n + 1 個節(jié)點(diǎn),但是這需要遍歷兩次。正常的刪除第 n 個節(jié)點(diǎn)只需要遍歷一次就可以,如何只遍歷一次找到倒數(shù)第 n 個節(jié)點(diǎn)呢?可以設(shè)置兩個指針 p1、p2,首先 p1 和 p2 都指向 head,p2 移動到第 n 個節(jié)點(diǎn),然后 p1 和 p2 同時向后移動,當(dāng) p2 移動到末尾時,p1 剛好指向倒數(shù)第 n 個節(jié)點(diǎn)。因?yàn)樽詈笠獎h除倒數(shù)第 n 個節(jié)點(diǎn),所以可以找到倒數(shù)第 n + 1 個節(jié)點(diǎn),方便刪除節(jié)點(diǎn)。這種思想在學(xué)校的時候?qū)W習(xí)過,還是蠻有用的吧,還是可以學(xué)到很多東西的,只不過總是找了很多借口。

 function Node(val){ //class的定義好像有點(diǎn)沒弄好
     this.val = val;
     this.next = null;
   }
    
   function removeNthNodeFromEnd(head, location){
     if(head == null) return head;
     var pointer1 = head;
     var pointer2 = head;
     for(var i = 0 ; i < location; i ++ ){
       pointer2 = pointer2.next;
       if(pointer2==null&&i!=location-1)
       return null; //如果根本沒有n個元素,就沒有倒數(shù)第n個元素
     }
     if(pointer2==null){  //總共就n個元素,那么head就是要刪除的那個點(diǎn),返回下一個節(jié)點(diǎn)作為頭節(jié)點(diǎn)就好了。
       return pointer1.next;
     }
     while(pointer2.next!=null){ //如果條件是pointer2!=null,那么被刪除的點(diǎn)就是pointer1,但是這樣刪不掉。所以應(yīng)該記錄要刪除的節(jié)點(diǎn)的上一個節(jié)點(diǎn)。
       pointer2=pointer2.next;
       pointer1=pointer1.next;
     }
     pointer1.next = pointer1.next.next;//
     return head;

   }

我自己測試了下,測試用例如下,可能構(gòu)建鏈表的過程有點(diǎn)傻。

   var head = new Node("head");
   var current = head,next = null;
   for(var i =5 ; i >0 ; i--){
     next = new Node(i);
     current.next = next;
     current = next;
   }
   function showLinkedNode(head){
     if(head==null) console.log("head is "+head);
     while(head!=null){
       console.log(head.val);
       head = head.next;
     }
   }
    showLinkedNode(head);
    var result = removeNthNodeFromEnd(head,6);
    showLinkedNode(result);

結(jié)果是 head 5 4 3 2 1 和 5 4 3 2 1
如果removeNthNodeFromEnd(head,7),返回的是null。

   showLinkedNode(head);
   var result = removeNthNodeFromEnd(head,3);
   showLinkedNode(result);

結(jié)果是head 5 4 2 1
還是得自己動手寫寫,可能以前能懂,但是過了一段時間以后就不懂了,讓往日的自己和后面的自己隔著時間對話。人并不總是在進(jìn)步,每一個時間點(diǎn)的思考以及結(jié)論都很有意義。

類似的問題
題目描述:求單鏈表的中間節(jié)點(diǎn),如果鏈表的長度為偶數(shù),返回中間兩個節(jié)點(diǎn)的任意一個,若為奇數(shù),則返回中間節(jié)點(diǎn)。

分析:這道題的思路和第 3 題「刪除單鏈表倒數(shù)第 n 個節(jié)點(diǎn)」很相似。如果要求只能遍歷一遍鏈表的花,也通過兩個指針來完成。兩個指針從頭節(jié)點(diǎn)開始,慢指針每次向后移動一步,快指針每次向后移動兩步,直到快指針移動到尾節(jié)點(diǎn)時,慢指針移動到中間節(jié)點(diǎn)。思路很相似,那么三分之一,四分之一,五分之一,或者均分三段,均分四段也是類似的想法。

  function findMiddleNode(head){
     if(head==null||head.next==null) return head;
     var fastPoint = head;
     var normalPoint = head;
     while(fastPoint!=null&&fastPoint.next!=null){
           fastPoint = fastPoint.next.next;
           normalPoint = normalPoint.next;
     }
     return normalPoint;
   }

這個感覺比較簡單。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/90177.html

相關(guān)文章

  • 優(yōu)秀程序員都應(yīng)該學(xué)習(xí)的 GitHub 上開源的數(shù)據(jù)結(jié)構(gòu)與算法項(xiàng)目

    摘要:強(qiáng)烈推薦上值得前端學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)與算法項(xiàng)目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數(shù)據(jù)結(jié)構(gòu),提供進(jìn)一步閱讀的解釋和鏈接。數(shù)據(jù)結(jié)構(gòu)和算法必知必會的個代碼實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就算招式練的再花哨,終究成不了高手;只有內(nèi)功深厚者,前端之路才會走得...

    cheukyin 評論0 收藏0
  • 【你該懂一點(diǎn)Javascript算法系列】之單源最短路徑 - Dijkstra算法

    摘要:算法系列單源最短路徑算法迪杰斯特拉算法是由荷蘭計(jì)算機(jī)科學(xué)家狄克斯特拉于年提出的,因此又叫狄克斯特拉算法。是從一個頂點(diǎn)到其余各頂點(diǎn)的最短路徑算法,解決的是有向圖中最短路徑問題。 Javascript算法系列 - 單源最短路徑 - Dijkstra算法 迪杰斯特拉算法是由荷蘭計(jì)算機(jī)科學(xué)家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是從一個頂點(diǎn)到其余各頂點(diǎn)的最短路徑算法,解決的是有...

    SoapEye 評論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 冒泡排序、插入排序、選擇排序

    摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r間復(fù)雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實(shí)現(xiàn)思路有點(diǎn)類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,...

    canger 評論0 收藏0
  • JavaScript設(shè)計(jì)模式----策略模式

    摘要:實(shí)際上在這種將函數(shù)作為一等對象的語言里,策略模式已經(jīng)融入到了語言本身當(dāng)中,我們經(jīng)常使用高階函數(shù)來封裝不同的行為,并且把它傳遞到另一個函數(shù)中。 聲明:這個系列為閱讀《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》 ----曾探@著一書的讀書筆記 1.策略模式的定義 將不變的部分和變化的部分隔開是每個設(shè)計(jì)模式的主題。 定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。 2.策略模式...

    forrest23 評論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 十大經(jīng)典排序算法匯總

    摘要:筆者寫的數(shù)據(jù)結(jié)構(gòu)與算法之美系列用的語言是,旨在入門數(shù)據(jù)結(jié)構(gòu)與算法和方便以后復(fù)習(xí)。這應(yīng)該是目前較為簡單的十大經(jīng)典排序算法的文章講解了吧。比如原本在的前面,而,排序之后,在的后面十大經(jīng)典排序算法冒泡排序思想冒泡排序只會操作相鄰的兩個數(shù)據(jù)。 showImg(https://segmentfault.com/img/bVbvHet); 1. 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就...

    zsy888 評論0 收藏0
  • JavaScript中的算法(附10道面試常見算法題解決方法和思路)

    摘要:中的算法附道面試常見算法題解決方法和思路關(guān)注每日一道面試題詳解面試過程通常從最初的電話面試開始,然后是現(xiàn)場面試,檢查編程技能和文化契合度。值得記住的數(shù)組方法有和。一個好的解決方案是使用內(nèi)置的方法。 JavaScript中的算法(附10道面試常見算法題解決方法和思路) 關(guān)注github每日一道面試題詳解 Introduction 面試過程通常從最初的電話面試開始,然后是現(xiàn)場面試,檢查編程...

    Cruise_Chan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<