Java中单向链表的实现
-
单项链表
链表的一种,有多个节点组成,对链表的访问必须从头开始访问
- 建立节点结构
public class Node {
int data ;//节点的数据
Node next = null;//指向下一个节点的“指针”
public Node(){}
public Node(int data) {
this.data = data;
}
//添加新节点这里用的递归,直到他的西下一个节点为空就加上新节点
public void addNode(Node a) {
if(this.next == null)
this.next = a;
else
this.next.addNode(a);
}
}
- 建立链表
class Link{
Node root = null;
//实例化链表的方法
Link(){}
Link(int data){
Node a = new Node(data);
root = a;
}
//给链表添加新元素
public void add(int a) {
Node temp = new Node(a) ;
root.addNode(temp);
}
//遍历链表并且输出结果
public void get() {
Node temp = root;
while(temp != null) {
System.out.print(temp.data);
if(temp.next != null) {
System.out.print("-");
temp = temp.next;
}
else
temp = null;
}
System.out.println();
}
//获取链表的长度
public int length() {
int i = 1;
Node temp = this.root;
if(temp != null) {
while(temp.next != null) {
i = i+1;
temp = temp.next;
}
return i;
}else {
return 0;
}
}
//删除链表中值为a的节点
public void del(int a) {
Node temp = root;
while(temp.next != null) {
if(temp.data == a) {
this.root = temp;
}
if(temp.next != null) {
if(temp.next.data == a) {
if(temp.next.next ==null) {
temp.next = null;
}else {
temp.next = temp.next.next;
}
}else {
temp = temp.next;
}
}
else
temp = null;
}
}
//在链表中值为a的节点后添加一个值为newvalue的节点
public void insert(int a,int newvalue) {
Node newnode = new Node(newvalue);
Node temp = root;
while(temp != null) {
if(temp.data == a) {
newnode.next = temp.next;
temp.next = newnode;
}
if(temp.next != null) {
temp = temp.next;
}
else {
temp = null;
}
}
}
//在链表头部添加新节点
public void pop(int a) {
Node newnode = new Node(a);
newnode.next = root;
root = newnode;
}
}
- 测试代码
package 链表;
public class Demo {
public static void main(String[] args) {
Link li = new Link(1);
li.add(2);
li.add(3);
li.add(4);
li.add(5);
li.add(6);
li.get();
System.out.println(li.length());
li.del(3);
li.get();
System.out.println(li.length());
li.insert(2,99);
li.get();
li.pop(88);
li.get();
}
}
- 运行结果
-
总结
节点中的信息不一定说必须得是这么少,具体看用的时候的需求来定。