JAVA实现单链表以及单链表的基本操作

package 单链表;

//一个节点
public class Node {
	
	//节点内容
	int data;
	//下一个节点
	Node next;
	
	public Node(int data) {
		this.data = data;
	}
	
	//为节点追加节点
	public Node append(Node node) {
		Node currentNode = this;
		while(true) {
			//取出下一个节点
			Node nextNode = currentNode.next;
			//如果没有下一个节点
			if(nextNode == null)
				break;
			//赋值给当前节点
			currentNode = nextNode;
		}
		currentNode.next = node; 
		return this;
	}
	
	//显示所有节点信息
	public void show() {
		Node currentNode = this;
		while(true) {
			System.out.print(currentNode.data + " ");
			//取出下一个节点
			currentNode = currentNode.next;
			if(currentNode == null)
				break;
		}
		System.out.println(" ");
	}
	
	//插入一个节点
	public void after(Node node) {
		//取出下一个节点
		Node nextNext = next;
		//把新节点作为当前节点的下一个节点
		this.next = node;
		//把下下一个节点作为新节点的下一个节点
		node.next = nextNext;
	}
	
	//删除下一个节点
	public void removeNext() {
		//取出下下一个节点
		//1,2 ---> 2,3 ----> 3,4
		Node newNext = next.next;
		//把下下一个节点设置为当前节点的下一个节点
		this.next = newNext;
	}
	
	//获取下一个节点
	public Node next() {
		return this.next;
	}
	
	//获取节点中的数据
	public int getData() {
		return this.data;
	}
	
	//当前节点是否是最后一个节点
	public boolean isEmpty() {
		return next == null;
	}
	
	
}

具体原理如下:

  链表类似于火车,由每一个节点组成,每个节点内有两部分的东西

  1. 一部分是链表所携带的DATA数据
  2. 另一部分是一个地址,用来指向下一个节点

因为地址是一个节点,所以地址也是Node类型的


追加节点(在最后加一个Node)

  1. 声明一个新的节点currentNode,并且把第一个节点赋值给它
  2. 判断当前节点的地址值,是否指向下一节点(即currentNode.next != null);
  3. 若currentNode.next为空,即说明地址为指向任何东西(currentNode为最后一个节点)
  4. 此时把currentNode.next指向新增的node

	//插入一个节点
	public void after(Node node) {
		//取出下一个节点
		Node nextNext = next;
		//把新节点作为当前节点的下一个节点
		this.next = node;
		//把下下一个节点作为新节点的下一个节点
		node.next = nextNext;
	}

插入一个节点

例如(1,2)--->(2,3)--->(3,4)     (data,address)

想要在原链表中插入一个新的节点,比如(1,2)后面

只需要令原节点(1,2)的地址值address指向(newData,newAddress)

插入的节点的地址值newAddress指向(2,3)

即新链表为(1,2)--->(newData,newAddress)--->(2,3)--->(3,4) 

故先取出指向(2,3)的值(原来节点(1,2)的地址值)Node nextNext = next:

然后令新节点的地址值指向next,即node.next = nextNext;

原节点(1,2)的地址值指向新节点 this.next = node;


public void removeNext() {
		//取出下下一个节点
		//1,2 ---> 2,3 ----> 3,4
		Node newNext = next.next;
		//把下下一个节点设置为当前节点的下一个节点
		this.next = newNext;
	}

  删除节点

例如(1,2)--->(2,3)--->(3,4)     (data,address)

想要删除节点(2,3)

只需要令节点(1,2)的地址值address指向节点(3,4)即可

即(1,2)--->(3,4)

先获取指向节点(3,4)的值,即节点(2,3)的地址值

newNext = next.next

然后第一个的地址值this.next = newNext即可

猜你喜欢

转载自blog.csdn.net/xmt1369758466/article/details/86409836