欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、定義:

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

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

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

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

package com.example.demo.linkedlist;
 
/**
 * 結(jié)點(diǎn)
 * 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é)點(diǎn)
   * @param index 下標(biāo)
   * @return 結(jié)點(diǎn)
   */
  public Node getByIndex(Integer index) {
    if (index < 0 || index > length() - 1) {
      System.out.println("不存在此下標(biāo)結(jié)點(diǎn)");
    }
    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é)點(diǎn)之后的所有值
   * @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é)點(diǎn)
   */
  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é)點(diǎn)值: " + 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)文章

  • JavaWeb Spring注解Annotation深入學(xué)習(xí)

    JavaWeb Spring注解Annotation深入學(xué)習(xí)

    這篇文章主要為大家詳細(xì)介紹了JavaWeb Spring注解Annotation,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Mybatis 中 Oracle 的拼接模糊查詢及用法詳解

    Mybatis 中 Oracle 的拼接模糊查詢及用法詳解

    這篇文章主要介紹了Mybatis 中 Oracle 的拼接模糊查詢及用法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • Maven本地緩存清理小工具的實(shí)現(xiàn)

    Maven本地緩存清理小工具的實(shí)現(xiàn)

    這篇文章主要介紹了Maven本地緩存清理小工具的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • IntelliJ IDEA搜索整個項目進(jìn)行全局替換(有危險慎用)

    IntelliJ IDEA搜索整個項目進(jìn)行全局替換(有危險慎用)

    今天小編就為大家分享一篇關(guān)于IntelliJ IDEA搜索整個項目進(jìn)行全局替換(有危險慎用),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Java實(shí)現(xiàn)滑塊拼圖驗證碼

    Java實(shí)現(xiàn)滑塊拼圖驗證碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)滑塊拼圖驗證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java中 ? extends T 和 ? super T的理解

    Java中 ? extends T 和 ? super&nb

    本文主要介紹了Java中 ? extends T 和 ? super T的理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 使用java實(shí)現(xiàn)LIS算法,出操隊形的問題

    使用java實(shí)現(xiàn)LIS算法,出操隊形的問題

    下面小編就為大家?guī)硪黄褂胘ava實(shí)現(xiàn)LIS算法,出操隊形的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • idea社區(qū)版如何設(shè)置vm?options

    idea社區(qū)版如何設(shè)置vm?options

    這篇文章主要介紹了idea社區(qū)版如何設(shè)置vm?options問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • IDEA一致卡在build時間過長問題解決

    IDEA一致卡在build時間過長問題解決

    有很多小伙伴在起項目的時候巨慢,特別影響開發(fā)效率,本文主要介紹了IDEA一致卡在build時間過長問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 解決jhipster修改jdl生成的實(shí)體類報錯:liquibase.exception.ValidationFailedException: Validation Failed

    解決jhipster修改jdl生成的實(shí)體類報錯:liquibase.exception.ValidationFailed

    這篇文章主要介紹了解決jhipster修改jdl生成的實(shí)體類報錯:liquibase.exception.ValidationFailedException: Validation Failed問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論