java實(shí)現(xiàn)簡(jiǎn)單單鏈表
本文實(shí)例為大家分享了java實(shí)現(xiàn)簡(jiǎn)單單鏈表的具體代碼,供大家參考,具體內(nèi)容如下
一、定義:
單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來(lái)表示的,每個(gè)結(jié)點(diǎn)的構(gòu)成:元素(數(shù)據(jù)元素的映象) + 指針(相當(dāng)于JAVA中的引用,指示后繼元素存儲(chǔ)位置,),元素就是存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元,指針就是連接每個(gè)結(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)存地址,順著這個(gè)地址就能找到下一個(gè)結(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;
}
/**
* 獲取鏈表的長(zhǎng)度
* @return 鏈表長(zhǎng)度
*/
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ī),請(qǐng)檢查!");
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ī),請(qǐng)檢查!");
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;
}
/**
* 通過(guò)下標(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;
}
}
/**
* 打印某個(gè)節(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;
}
/**
* 測(cè)試
* @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);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaWeb Spring注解Annotation深入學(xué)習(xí)
這篇文章主要為大家詳細(xì)介紹了JavaWeb Spring注解Annotation,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
IntelliJ IDEA搜索整個(gè)項(xiàng)目進(jìn)行全局替換(有危險(xiǎn)慎用)
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA搜索整個(gè)項(xiàng)目進(jìn)行全局替換(有危險(xiǎn)慎用),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
Java中 ? extends T 和 ? super&nb
本文主要介紹了Java中 ? extends T 和 ? super T的理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
使用java實(shí)現(xiàn)LIS算法,出操隊(duì)形的問(wèn)題
下面小編就為大家?guī)?lái)一篇使用java實(shí)現(xiàn)LIS算法,出操隊(duì)形的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
idea社區(qū)版如何設(shè)置vm?options
這篇文章主要介紹了idea社區(qū)版如何設(shè)置vm?options問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
IDEA一致卡在build時(shí)間過(guò)長(zhǎng)問(wèn)題解決
有很多小伙伴在起項(xiàng)目的時(shí)候巨慢,特別影響開(kāi)發(fā)效率,本文主要介紹了IDEA一致卡在build時(shí)間過(guò)長(zhǎng)問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
解決jhipster修改jdl生成的實(shí)體類報(bào)錯(cuò):liquibase.exception.ValidationFailed
這篇文章主要介紹了解決jhipster修改jdl生成的實(shí)體類報(bào)錯(cuò):liquibase.exception.ValidationFailedException: Validation Failed問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

