最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java鏈表中添加元素的原理與實(shí)現(xiàn)方法詳解

 更新時(shí)間:2020年03月17日 10:17:30   作者:WFaceBoss  
這篇文章主要介紹了Java鏈表中添加元素的原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Java實(shí)現(xiàn)鏈表中添加元素的相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Java鏈表中添加元素的原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

1.鏈表中頭節(jié)點(diǎn)的引入

1.1基本的鏈表結(jié)構(gòu):

1.2對(duì)于鏈表來(lái)說(shuō),若想訪(fǎng)問(wèn)鏈表中每個(gè)節(jié)點(diǎn)則需要把鏈表的頭存起來(lái),假如鏈表的頭節(jié)點(diǎn)為head,指向鏈表中第一個(gè)節(jié)點(diǎn),如圖:

1.3使用代碼表示此時(shí)的鏈表

//定義頭節(jié)點(diǎn)
  private Node head;

  //節(jié)點(diǎn)個(gè)數(shù)
  private int size;


  //無(wú)參數(shù)構(gòu)造函數(shù)
  public LinkedList() {
    head = null;
    size = 0;
  }

  //獲取鏈表中的元素個(gè)數(shù)
  public int getSize() {
    return size;
  }

  //返回鏈表是否為空
  public boolean isEmpty() {
    return size == 0;
  }

 2.在鏈表頭添加元素

2.1初始時(shí),假設(shè)鏈表如下:

2.2 如在鏈表頭添加一個(gè)666元素則需要先將666放進(jìn)一個(gè)節(jié)點(diǎn)里,在節(jié)點(diǎn)里存入這個(gè)元素以及相應(yīng)的next。

操作如下:

第一步:現(xiàn)將666這個(gè)節(jié)點(diǎn)(node)的next指向head,代碼如下:

node.next=head

圖示為:

第二步:然后再將head指向新的節(jié)點(diǎn)666

head=node

圖示為:

通過(guò)第一步、第二步,我們就成功將新節(jié)點(diǎn)添加到頭節(jié)上。此時(shí)node這個(gè)變量也就結(jié)束了此輪的工作,結(jié)果變?yōu)椋?/p>

2.3 在鏈表頭添加新元素的相關(guān)代碼

 //在鏈表頭添加新的元素e
  public void addFirst(E e) {
    Node node = new Node(e);
    node.next = head;
    head = node;


    size++;
  }

等同于:

 //在鏈表頭添加新的元素e
  public void addFirst(E e) {
    head = new Node(e, head);
    size++;
  }

2.4 在鏈表中間添加元素

假設(shè)初始鏈表為:

假設(shè)我們需要在索引為2的位置添加元素666(此時(shí)的索引為2只是用來(lái)說(shuō)明我們此時(shí)需要操作的位置,并不是真正的索引意思)

操作步驟:

1):創(chuàng)建出666這個(gè)節(jié)點(diǎn)

2):使用一個(gè)變量prev來(lái)標(biāo)識(shí)在需要插入節(jié)點(diǎn)的地方的前一個(gè)節(jié)點(diǎn),初始時(shí)prev和頭節(jié)點(diǎn)head是相同的。

對(duì)于此處我們需要在索引為2的位置插入新元素,我們只需要找到索引為2的前一個(gè)位置(索引為1),然后把prev指向索引為1節(jié)點(diǎn)即可。

3):進(jìn)行元素添加操作

第一步:先將node的next指向prev的下一個(gè)節(jié)點(diǎn)元素

node.next=prev.next

第二步:再將prev的next指向node

prev.next=node

通過(guò)第一步、第二步即可將新元素插入到索引為2的地方。

 從上不難看出,對(duì)于在鏈表中添加元素關(guān)鍵是找到要添加的節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),因此對(duì)于在索引為0的節(jié)點(diǎn)添加元素就需要單獨(dú)處理。

關(guān)于在鏈表中間添加元素的代碼:

 //在鏈表的index(0--based)的位置添加新的元素e  (實(shí)際不常用,練習(xí)用)

  public void add(int index, E e) {
    if (index < 0 || index > size) {
      throw new IllegalArgumentException("位置不合法");
    }

    //對(duì)于頭節(jié)點(diǎn)的特殊處理
    if (index == 0) {
      addFirst(e);
    } else {
      Node prev = head;
      for (int i = 0; i < index - 1; i++) {//獲取到需要添加元素位置的前一個(gè)元素
        prev = prev.next;
      }

      Node node = new Node(e);
      node.next = prev.next;
      prev.next = node;

      size++;
    }

  }

此時(shí)代碼等同于:

 //在鏈表的index(0--based)的位置添加新的元素e  (時(shí)間不常用,練習(xí)用)

  public void add(int index, E e) {
    if (index < 0 || index > size) {
      throw new IllegalArgumentException("位置不合法");
    }

    //對(duì)于頭節(jié)點(diǎn)的特殊處理
    if (index == 0) {
      addFirst(e);
    } else {
      Node prev = head;
      for (int i = 0; i < index - 1; i++) {//獲取到需要添加元素位置的前一個(gè)元素
        prev = prev.next;
      }

//      Node node = new Node(e);
//      node.next = prev.next;
//      prev.next = node;

      prev.next=new Node(e,prev.next);

      size++;
    }

  }

3.在鏈表尾部添加元素

這里復(fù)用上述的add()方法

 //在鏈表末尾添加新的元素
  public void addLast(E e){
    add(size,e);
  }

本小節(jié)完整代碼:

package LinkedList;

public class LinkedList<E> {
  //將Node節(jié)點(diǎn)設(shè)計(jì)成私有的類(lèi)中類(lèi)
  private class Node<E> {
    public E e;
    public Node next;


    //兩個(gè)參數(shù)的構(gòu)造函數(shù)

    public Node(E e, Node next) {
      this.e = e;
      this.next = next;
    }

    //一個(gè)參數(shù)的構(gòu)造函數(shù)
    public Node(E e) {
      this.e = e;
      this.next = null;
    }

    //無(wú)參構(gòu)造函數(shù)
    public Node() {
      this(null, null);
    }

    @Override
    public String toString() {
      return e.toString();
    }
  }

  //定義頭節(jié)點(diǎn)
  private Node head;

  //節(jié)點(diǎn)個(gè)數(shù)
  private int size;


  //無(wú)參數(shù)構(gòu)造函數(shù)
  public LinkedList() {
    head = null;
    size = 0;
  }

  //獲取鏈表中的元素個(gè)數(shù)
  public int getSize() {
    return size;
  }

  //返回鏈表是否為空
  public boolean isEmpty() {
    return size == 0;
  }


  //在鏈表頭添加新的元素e
  public void addFirst(E e) {
    head = new Node(e, head);
    size++;
  }

  //在鏈表的index(0--based)的位置添加新的元素e  (實(shí)際不常用,練習(xí)用)

  public void add(int index, E e) {
    if (index < 0 || index > size) {
      throw new IllegalArgumentException("位置不合法");
    }

    //對(duì)于頭節(jié)點(diǎn)的特殊處理
    if (index == 0) {
      addFirst(e);
    } else {
      Node prev = head;
      for (int i = 0; i < index - 1; i++) {//獲取到需要添加元素位置的前一個(gè)元素
        prev = prev.next;
      }

//      Node node = new Node(e);
//      node.next = prev.next;
//      prev.next = node;

      prev.next=new Node(e,prev.next);

      size++;
    }

  }

  //在鏈表末尾添加新的元素
  public void addLast(E e){
    add(size,e);
  }
}

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 詳解Mybatis攔截器安全加解密MySQL數(shù)據(jù)實(shí)戰(zhàn)

    詳解Mybatis攔截器安全加解密MySQL數(shù)據(jù)實(shí)戰(zhàn)

    本文主要介紹了Mybatis攔截器安全加解密MySQL數(shù)據(jù)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring?Cloud?Eureka?搭建?&?集群方式

    Spring?Cloud?Eureka?搭建?&?集群方式

    這篇文章主要介紹了Spring?Cloud?Eureka?搭建?&?集群方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java8深入學(xué)習(xí)系列(二)函數(shù)式編程

    Java8深入學(xué)習(xí)系列(二)函數(shù)式編程

    函數(shù)式編程,這個(gè)詞語(yǔ)由兩個(gè)名詞構(gòu)成,函數(shù),編程。編程這個(gè)詞我就不用解釋了,大家都是做這個(gè)的。函數(shù),其實(shí)單獨(dú)抽離出來(lái)這個(gè)詞語(yǔ),也并不陌生,那二者組合后的到底是什么呢,下面這篇文章主要給大家介紹了關(guān)于Java8函數(shù)式編程的相關(guān)資料,需要的朋友可以參考下。
    2017-08-08
  • Java中的Lombok使用及工作原理詳解

    Java中的Lombok使用及工作原理詳解

    這篇文章主要介紹了Java中的Lombok使用及工作原理詳解,Lombok是一個(gè)Java庫(kù),能自動(dòng)插入編輯器并構(gòu)建工具,簡(jiǎn)化Java開(kāi)發(fā),通過(guò)添加注解的方式,不需要為類(lèi)編寫(xiě)getter或eques方法,同時(shí)可以自動(dòng)化日志變量,需要的朋友可以參考下
    2023-10-10
  • Java基礎(chǔ)知識(shí)精通各種運(yùn)算符

    Java基礎(chǔ)知識(shí)精通各種運(yùn)算符

    計(jì)算機(jī)的最基本用途之一就是執(zhí)行數(shù)學(xué)運(yùn)算,作為一門(mén)計(jì)算機(jī)語(yǔ)言,Java也提供了一套豐富的運(yùn)算符來(lái)操縱變量,本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2022-04-04
  • java關(guān)于持久層面試題目整理

    java關(guān)于持久層面試題目整理

    在本篇文章里小編給大家分享的是一篇關(guān)于java關(guān)于持久層面試題目整理內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • Java?8中的18個(gè)常用日期處理(收藏)

    Java?8中的18個(gè)常用日期處理(收藏)

    伴隨lambda表達(dá)式、streams以及一系列小優(yōu)化,Java 8 推出了全新的日期時(shí)間API,這篇文章主要介紹了Java?8的18個(gè)常用日期處理,需要的朋友可以參考下
    2022-04-04
  • java集成kafka實(shí)例代碼

    java集成kafka實(shí)例代碼

    文章介紹了如何在Java項(xiàng)目中集成Apache Kafka以實(shí)現(xiàn)消息的生產(chǎn)和消費(fèi),通過(guò)添加Maven依賴(lài)、配置生產(chǎn)者和消費(fèi)者、使用SpringBoot簡(jiǎn)化集成以及控制消費(fèi)者的啟動(dòng)和停止,可以實(shí)現(xiàn)高效的消息處理
    2024-12-12
  • JDK下載與安裝超詳細(xì)步驟大全

    JDK下載與安裝超詳細(xì)步驟大全

    學(xué)習(xí)JAVA必須得安裝一下JDK(java development kit java開(kāi)發(fā)工具包),配置一下環(huán)境就可以學(xué)習(xí)JAVA了,下面這篇文章主要給大家介紹了關(guān)于JDK下載與安裝步驟的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Springmvc ResponseBody響應(yīng)json數(shù)據(jù)實(shí)現(xiàn)過(guò)程

    Springmvc ResponseBody響應(yīng)json數(shù)據(jù)實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Springmvc ResponseBody響應(yīng)json數(shù)據(jù)實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

安化县| 社会| 依兰县| 无为县| 凤山县| 南通市| 靖宇县| 新和县| 桂东县| 桐庐县| 财经| 通江县| 孙吴县| 蕉岭县| 连州市| 五常市| 伊吾县| 长汀县| 馆陶县| 福州市| 绵阳市| 彰化市| 日土县| 灌南县| 绥化市| 绥中县| 巴林右旗| 北辰区| 区。| 西乡县| 东莞市| 新干县| 太原市| 镇康县| 新津县| 萨嘎县| 长泰县| 清徐县| 凭祥市| 科尔| 高青县|