中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用java怎么實現一個單鏈表

發布時間:2021-02-25 14:28:29 來源:億速云 閱讀:157 作者:戴恩恩 欄目:開發技術

本文章向大家介紹利用java怎么實現一個單鏈表的基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。

Java的特點有哪些

Java的特點有哪些 1.Java語言作為靜態面向對象編程語言的代表,實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。 2.Java具有簡單性、面向對象、分布式、安全性、平臺獨立與可移植性、動態性等特點。 3.使用Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。

一、定義:

單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) + 指針(相當于JAVA中的引用,指示后繼元素存儲位置,),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。

二、結構:

利用java怎么實現一個單鏈表

如圖所示,data就是當前節點的數據,next是指針,指針存放的是內存地址,是當前結點的下一結點內存地址,順著這個地址就能找到下一個結點。

三、代碼實現:

package com.example.demo.linkedlist;
 
/**
 * 結點
 * 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 待添加數據
   */
  public void addHead(Integer data) {
    Node node = new Node(data);
    node.next = head;
    head = node;
  }
 
  /**
   * 從尾部添加
   * @param data 待添加數據
   */
  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;
  }
 
  /**
   * 從指定下標處添加
   * @param index 指定下標
   * @param data 待添加的數據
   */
  public void addByIndex(int index, Integer data) {
    if (index < 0 || index > length()) {
      System.out.println("插入下標不合規,請檢查!");
      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;
  }
 
  /**
   * 指定下標刪除
   * @param index 指定下標
   */
  public void deleteByIndex(int index) {
    if (index < 0 || index > length()) {
      System.out.println("刪除下標不合規,請檢查!");
      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;
  }
 
  /**
   * 通過下標獲取結點
   * @param index 下標
   * @return 結點
   */
  public Node getByIndex(Integer index) {
    if (index < 0 || index > length() - 1) {
      System.out.println("不存在此下標結點");
    }
    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;
    }
  }
 
  /**
   * 打印某個節點之后的所有值
   * @param node
   */
  public static void printAfterNode(Node node) {
    while (node != null) {
      System.out.println(node.value);
      node = node.next;
    }
  }
 
  /**
   * 清除單鏈表
   */
  public void clearLink() {
    head = null;
  }
 
  /**
   * 單鏈表反轉
   * @param head 頭節點
   */
  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("獲取下標為1的結點值: " + byIndex1.value);
    linkNode.addByIndex(2, 8);
    System.out.println("下標2添加后打印單鏈表: ");
    linkNode.printLink();
    linkNode.addByIndex(0, 11);
    System.out.println("下標0添加后打印單鏈表: ");
    linkNode.printLink();
    linkNode.deleteByIndex(0);
    System.out.println("下標0刪除后打印單鏈表: ");
    linkNode.printLink();
    Node node = linkNode.reverseLink(linkNode.head);
    System.out.println("反轉后打印單鏈表: ");
    printAfterNode(node);
  }
 
}

以上就是小編為大家帶來的利用java怎么實現一個單鏈表的全部內容了,希望大家多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当阳市| 义马市| 鄂尔多斯市| 潜山县| 革吉县| 泾阳县| 察雅县| 利辛县| 余干县| 辽宁省| 岳阳市| 榆社县| 固始县| 安国市| 南通市| 福贡县| 陵川县| 武汉市| 巴青县| 仲巴县| 石嘴山市| 逊克县| 温宿县| 高平市| 灵璧县| 仙桃市| 资中县| 翁源县| 诸城市| 许昌县| 肥西县| 屏边| 炉霍县| 德化县| 黔东| 富宁县| 十堰市| 交口县| 甘肃省| 平湖市| 涪陵区|