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实现简单单链表 的全部内容, 来源链接: utcz.com/z/311540.html

回到顶部