Java实现单向链表
Posted 神友
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现单向链表相关的知识,希望对你有一定的参考价值。
/*
* 结点类
*/
public class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
// 设置结点 数据的方法
public void setData(int data) {
this.data = data;
}
// 设置结点指针的方法
public void setNext(Node next) {
this.next = next;
}
// 获取结点数据的方法
public int getData() {
return this.data;
}
// 获取下一个结点的方法
public Node getNext() {
return this.next;
}
}
* 结点类
*/
public class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
// 设置结点 数据的方法
public void setData(int data) {
this.data = data;
}
// 设置结点指针的方法
public void setNext(Node next) {
this.next = next;
}
// 获取结点数据的方法
public int getData() {
return this.data;
}
// 获取下一个结点的方法
public Node getNext() {
return this.next;
}
}
/*
* 单向链表类
*/
public class List{
private Node head;
public List() {
this.head = null;
}
// 链表尾部添加结点
public void addNode(Node node) {
if (head == null) {
head = node;
}
else {
Node tmp = head;
while(tmp.getNext() != null) {
tmp = tmp.getNext();
}
tmp.setNext(node);
}
}
// 删除结点
public void deleteNode(Node node) {
if (!isExist(node)) {
System.out.println("结点不存在!");
return ;
}
if (this.head.getData() == node.getData()) {
this.head = this.head.getNext();
return ;
}
Node tmp = this.head;
while (tmp != null) {
if (tmp.getNext().getData() == node.getData())
break;
tmp = tmp.getNext();
}
tmp.setNext(tmp.getNext().getNext());
}
// 遍历链表
public void traverse() {
if (this.head == null) {
System.out.println("链表为空");
return ;
}
System.out.print("链表各结点为:");
Node tmp = head;
while (tmp != null) {
System.out.print(tmp.getData() + " ");
tmp = tmp.getNext();
}
System.out.println();
}
// 判断结点是否存在
boolean isExist(Node node) {
Node tmp = head;
while (tmp != null) {
if (tmp.getData() == node.getData())
return true;
tmp = tmp.getNext();
}
return false;
}
}
* 单向链表类
*/
public class List{
private Node head;
public List() {
this.head = null;
}
// 链表尾部添加结点
public void addNode(Node node) {
if (head == null) {
head = node;
}
else {
Node tmp = head;
while(tmp.getNext() != null) {
tmp = tmp.getNext();
}
tmp.setNext(node);
}
}
// 删除结点
public void deleteNode(Node node) {
if (!isExist(node)) {
System.out.println("结点不存在!");
return ;
}
if (this.head.getData() == node.getData()) {
this.head = this.head.getNext();
return ;
}
Node tmp = this.head;
while (tmp != null) {
if (tmp.getNext().getData() == node.getData())
break;
tmp = tmp.getNext();
}
tmp.setNext(tmp.getNext().getNext());
}
// 遍历链表
public void traverse() {
if (this.head == null) {
System.out.println("链表为空");
return ;
}
System.out.print("链表各结点为:");
Node tmp = head;
while (tmp != null) {
System.out.print(tmp.getData() + " ");
tmp = tmp.getNext();
}
System.out.println();
}
// 判断结点是否存在
boolean isExist(Node node) {
Node tmp = head;
while (tmp != null) {
if (tmp.getData() == node.getData())
return true;
tmp = tmp.getNext();
}
return false;
}
}
public class TestList {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化链表类,添加10个结点
List list = new List();
for (int i=0; i<10; i++) {
list.addNode(new Node(i+1));
}
// 遍历链表
list.traverse();
// 删除其中一个结点
list.deleteNode(new Node(5));
// 删除后再次遍历链表
list.traverse();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化链表类,添加10个结点
List list = new List();
for (int i=0; i<10; i++) {
list.addNode(new Node(i+1));
}
// 遍历链表
list.traverse();
// 删除其中一个结点
list.deleteNode(new Node(5));
// 删除后再次遍历链表
list.traverse();
}
}
以上是关于Java实现单向链表的主要内容,如果未能解决你的问题,请参考以下文章
Java 数据结构 & 算法宁可累死自己, 也要卷死别人 7 单向链表