java实现简单单链表

本文实例为大家分享了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实现简单单链表

相关文章:

你感兴趣的文章:

标签云: