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

java實現(xiàn)簡單單鏈表

 更新時間:2021年02月25日 10:36:23   作者:xinan~  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)簡單單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)簡單單鏈表的具體代碼,供大家參考,具體內(nèi)容如下

一、定義:

單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點來表示的,每個結(jié)點的構(gòu)成:元素(數(shù)據(jù)元素的映象) + 指針(相當(dāng)于JAVA中的引用,指示后繼元素存儲位置,),元素就是存儲數(shù)據(jù)的存儲單元,指針就是連接每個結(jié)點的地址數(shù)據(jù)。

二、結(jié)構(gòu):

如圖所示,data就是當(dāng)前節(jié)點的數(shù)據(jù),next是指針,指針存放的是內(nèi)存地址,是當(dāng)前結(jié)點的下一結(jié)點內(nèi)存地址,順著這個地址就能找到下一個結(jié)點。

三、代碼實現(xiàn):

package com.example.demo.linkedlist;
 
/**
 * 結(jié)點
 * Created by xinan on 2021/02/23
 */
public class Node {
 
  public Integer value;
 
  public Node next;
 
  public Node(Integer value) {
    this.value = value;
  }
 
  public Node(Integer value, Node next) {
    this.value = value;
    this.next = next;
  }
 
  public Integer getValue() {
    return value;
  }
 
  public void setValue(Integer value) {
    this.value = value;
  }
 
  public Node getNext() {
    return next;
  }
 
  public void setNext(Node next) {
    this.next = next;
  }
  
}
package com.example.demo.linkedlist;
 
 
/**
 * 單鏈表
 * Created by xinan on 2021/2/23
 */
public class SingleLinkedList {
 
  public Node head;
 
  /**
   * 從頭部添加
   * @param data 待添加數(shù)據(jù)
   */
  public void addHead(Integer data) {
    Node node = new Node(data);
    node.next = head;
    head = node;
  }
 
  /**
   * 從尾部添加
   * @param data 待添加數(shù)據(jù)
   */
  public void addLast(Integer data) {
    Node node = new Node(data);
    if (head == null) {
      head = node;
      return;
    }
    Node temp = head;
    while (temp.next != null) {
      temp = temp.next;
    }
    temp.next = node;
  }
 
  /**
   * 獲取鏈表的長度
   * @return 鏈表長度
   */
  public Integer length() {
    int length = 0;
    Node temp = head;
    while (temp != null) {
      temp = temp.next;
      length ++;
    }
    return length;
  }
 
  /**
   * 從指定下標(biāo)處添加
   * @param index 指定下標(biāo)
   * @param data 待添加的數(shù)據(jù)
   */
  public void addByIndex(int index, Integer data) {
    if (index < 0 || index > length()) {
      System.out.println("插入下標(biāo)不合規(guī),請檢查!");
      return;
    }
    if (index == 0) {
      addHead(data);
      return;
    }
    Node node = new Node(data);
    Node temp = head;
    for (int i = 1; i < index; i++) {
      temp = temp.next;
    }
    node.next = temp.next;
    temp.next = node;
  }
 
  /**
   * 指定下標(biāo)刪除
   * @param index 指定下標(biāo)
   */
  public void deleteByIndex(int index) {
    if (index < 0 || index > length()) {
      System.out.println("刪除下標(biāo)不合規(guī),請檢查!");
      return;
    }
    if (index == 0) {
      head = head.next;
      return;
    }
    Node temp = head;
    for (int i = 1; i < index; i++) {
      temp = temp.next;
    }
    temp.next = temp.next.next;
  }
 
  /**
   * 通過下標(biāo)獲取結(jié)點
   * @param index 下標(biāo)
   * @return 結(jié)點
   */
  public Node getByIndex(Integer index) {
    if (index < 0 || index > length() - 1) {
      System.out.println("不存在此下標(biāo)結(jié)點");
    }
    Node temp = head;
    int i = 0;
    while (temp != null) {
      if (i == index) {
        return temp;
      }
      i ++;
      temp = temp.next;
    }
    return null;
  }
 
  /**
   * 打印鏈表值
   */
  public void printLink() {
    Node temp = head;
    while (temp != null) {
      System.out.println(temp.value);
      temp = temp.next;
    }
  }
 
  /**
   * 打印某個節(jié)點之后的所有值
   * @param node
   */
  public static void printAfterNode(Node node) {
    while (node != null) {
      System.out.println(node.value);
      node = node.next;
    }
  }
 
  /**
   * 清除單鏈表
   */
  public void clearLink() {
    head = null;
  }
 
  /**
   * 單鏈表反轉(zhuǎn)
   * @param head 頭節(jié)點
   */
  public Node reverseLink(Node head) {
    Node prev = null;
    Node curr = head;
    while (curr != null) {
      Node nextTemp = curr.next;
      curr.next = prev;
      prev = curr;
      curr = nextTemp;
    }
    return prev;
  }
 
  /**
   * 測試
   * @param args
   */
  public static void main(String[] args) {
    SingleLinkedList linkNode = new SingleLinkedList();
    linkNode.addHead(2);
    linkNode.addHead(3);
    linkNode.addHead(5);
    linkNode.addLast(9);
    linkNode.addLast(7);
    System.out.println("打印單鏈表: ");
    linkNode.printLink();
    Node byIndex1 = linkNode.getByIndex(0);
    System.out.println("獲取下標(biāo)為1的結(jié)點值: " + byIndex1.value);
    linkNode.addByIndex(2, 8);
    System.out.println("下標(biāo)2添加后打印單鏈表: ");
    linkNode.printLink();
    linkNode.addByIndex(0, 11);
    System.out.println("下標(biāo)0添加后打印單鏈表: ");
    linkNode.printLink();
    linkNode.deleteByIndex(0);
    System.out.println("下標(biāo)0刪除后打印單鏈表: ");
    linkNode.printLink();
    Node node = linkNode.reverseLink(linkNode.head);
    System.out.println("反轉(zhuǎn)后打印單鏈表: ");
    printAfterNode(node);
  }
 
}

 以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Java實現(xiàn)DNS域名解析的簡單示例

    使用Java實現(xiàn)DNS域名解析的簡單示例

    這篇文章主要介紹了使用Java實現(xiàn)DNS域名解析的簡單示例,包括對一個動態(tài)IP主機(jī)的域名解析例子,需要的朋友可以參考下
    2015-10-10
  • SpringCloud Alibaba 基本開發(fā)框架搭建過程

    SpringCloud Alibaba 基本開發(fā)框架搭建過程

    這篇文章主要介紹了SpringCloud Alibaba 基本開發(fā)框架搭建過程,開發(fā)工具選用的idea,本文通過圖文實例相結(jié)合給大家分享搭建全過程,需要的朋友可以參考下
    2021-06-06
  • springboot使用CommandLineRunner解決項目啟動時初始化資源的操作

    springboot使用CommandLineRunner解決項目啟動時初始化資源的操作

    這篇文章主要介紹了springboot使用CommandLineRunner解決項目啟動時初始化資源的操作,幫助大家更好的理解和學(xué)習(xí)使用springboot框架,感興趣的朋友可以了解下
    2021-02-02
  • Spring Cloud GateWay 路由轉(zhuǎn)發(fā)規(guī)則介紹詳解

    Spring Cloud GateWay 路由轉(zhuǎn)發(fā)規(guī)則介紹詳解

    這篇文章主要介紹了Spring Cloud GateWay 路由轉(zhuǎn)發(fā)規(guī)則介紹詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • SpringBoot+Mybatis使用Mapper接口注冊的幾種方式

    SpringBoot+Mybatis使用Mapper接口注冊的幾種方式

    本篇博文中主要介紹是Mapper接口與對應(yīng)的xml文件如何關(guān)聯(lián)的幾種姿勢,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置

    SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置

    今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java JUnit 使用及常用注解

    Java JUnit 使用及常用注解

    JUnit是Java開發(fā)中必不可少的測試框架之一,它可以幫助您編寫高質(zhì)量、可維護(hù)的單元測試,本文介紹了JUnit的基本用法、常用注解、測試套件和參數(shù)化測試等內(nèi)容,希望對您的測試工作有所幫助,感興趣的朋友一起看看吧
    2023-12-12
  • Spring注解@DependsOn解析

    Spring注解@DependsOn解析

    今天要分享得是Spring的@DependsOn注解,對于@DependsOn,我們從它的名稱里面就能看出意思是“依賴于”,那么在Spring中,它的作用就是解決Bean的創(chuàng)建依賴,感興趣的小伙伴快來閱讀吧
    2023-04-04
  • Java Poi 在Excel中輸出特殊符號的實現(xiàn)方法

    Java Poi 在Excel中輸出特殊符號的實現(xiàn)方法

    這篇文章主要介紹了Java Poi 在Excel中輸出特殊符號的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java不用算數(shù)運算符來實現(xiàn)求和方法

    Java不用算數(shù)運算符來實現(xiàn)求和方法

    我們都知道,Java的運算符除了具有優(yōu)先級之外,還有一個結(jié)合性的特點。當(dāng)一個表達(dá)式中出現(xiàn)多種運算符時,執(zhí)行的先后順序不僅要遵守運算符優(yōu)先級別的規(guī)定,還要受運算符結(jié)合性的約束,以便確定是自左向右進(jìn)行運算還是自右向左進(jìn)行運算,但是如果不用運算符怎么求和呢
    2022-04-04

最新評論

山丹县| 建宁县| 万盛区| 永泰县| 重庆市| 曲靖市| 隆昌县| 凤阳县| 井陉县| 花垣县| 河间市| 招远市| 体育| 辉县市| 横峰县| 嘉黎县| 五河县| 景东| 政和县| 盐源县| 商都县| 涡阳县| 民丰县| 鄂伦春自治旗| 兴隆县| 呼图壁县| 阜康市| 揭阳市| 平阴县| 于田县| 泰安市| 石楼县| 恩施市| 海安县| 黄梅县| 武乡县| 乌兰察布市| 泗水县| 呈贡县| 巨鹿县| 政和县|