单链表

增加新功能(显示所有节点,删除一个节点,插入一个节点)

Posted by Ruizhi Ma on May 19, 2019

代码实现

Node类

package demo2;

public class Node {
	//节点的内容
	int data;
	
	//下一个节点的索引
	Node nextAddress;
	
	public Node(int data){
		this.data = data;
	}
	
	//为节点追加节点
	public Node append(Node node){
		//获取当前节点
		Node currentNode = this;
		
		//判断是否有下一个节点
		while(true){
			//取出下一个节点
			Node nextNode = currentNode.nextAddress;
			//如果下一个节点为null,说明当前节点为最后一个节点
			if(nextNode == null){
				break;
			}
			//将下一个节点赋给当前值
			currentNode = nextNode;
		}
		//追加节点
		currentNode.nextAddress = node;
		return this;
	}
	
	//显示所有节点
	public void showAll(){
		Node currentNode = this;
		
		while(true){
			//打印当前节点
			System.out.print(currentNode.getData() + " ");
			//下一个节点为空,则节点到头,跳出循环
			if(currentNode.nextAddress == null){
				break;
			}
			
			//将下一个节点赋给当前节点
			currentNode = currentNode.nextAddress;
		}
		
	}
	
	//删除一个节点
	public void removeNext(){
		//找到下下个节点
		Node newNode = this.nextAddress.nextAddress;
		//用下下个节点,替换下个节点
		this.nextAddress = newNode;
	}
	
	//插入一个节点
	public void after(Node node){
		//取出下个节点,作为下下个节点
		Node nextNext = nextAddress;
		
		//将新节点设置为下个节点
		this.nextAddress = node;
		
		//将下下个节点设置为新节点的下个节点
		node.nextAddress = nextNext;
	}
	
	//获取节点内容
	public int getData(){
		return this.data;
	}
	
	//获取下一个节点
	public Node next(){
		return this.nextAddress;
	}
	
	//是否是最后一个节点
	public boolean isLast(){
		return nextAddress == null;
	}
}

TestNode类

package demo2.test;

import demo2.Node;

public class TestNode {

	public static void main(String[] args) {
		//创建节点
		Node n1 = new Node(0);
		Node n2 = new Node(1);
		Node n3 = new Node(2);
		Node n4 = new Node(3);
		
		//追加节点
		System.out.println("为节点追加节点:");
		n1.append(n2).append(n3).append(n4);
		
		//取出下一个节点
		System.out.println("取出下一个节点:");
		System.out.println(n1.next().next().next().getData());
		
		//判断是否为最后一个节点
		System.out.println("判断是否为最后一个节点:");
		System.out.println(n1.next().isLast());
		System.out.println(n1.next().next().next().isLast());
		
		//显示所有节点
		System.out.println("打印所有节点:");
		n1.showAll();
		System.out.println();
		
		//删除下一个节点
		System.out.println("删除下一个节点之后的结果:");
		n1.removeNext();
		n1.showAll();
		System.out.println();
		
		//插入节点
		Node n5 = new Node(5);
		System.out.println("插入节点:");
		n1.after(n5);
		n1.showAll();
	}

}

运行结果:
为节点追加节点:
取出下一个节点:
3
判断是否为最后一个节点:
false
true
打印所有节点:
0 1 2 3
删除下一个节点之后的结果:
0 2 3
插入节点:
0 5 2 3