Java单链表的简单操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ScongHW/article/details/83578547

链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。(百度百科解释)

1.定义一个节点类

	//定义链表节点类
	private class Node{
		
		private Object data; //定义节点数据
		private Node next;  //定义指向的下一个节点
		public Node(Object data){
			this.data = data;
		}
	}

2.链表的基本操作

public class SingleLinkedList {

	private int size;//定义链表节点的个数
	
	private Node head;//头结点
	
	public SingleLinkedList() {
		size = 0;
		head = null;
	}
	
	//定义链表节点类
	private class Node{
		
		private Object data; //定义节点数据
		private Node next;  //定义指向的下一个节点
		public Node(Object data){
			this.data = data;
		}
	}
	
	//添加链表的头结点
	public Object addHead(Object obj){
		Node newNode = new Node(obj);
		if(size==0){
			head = newNode;
		}else{
			newNode.next = head;
			head = newNode;
		}
		size++;
		return obj;
	}
	
	//删除头结点
	public Object deleteHead(){
		Object obj = head.data;
		head = head.next;
		return obj;
	}
	
	//查找指定的元素对应的节点
	public Node find(Object obj){
		int tempSize = size;
		Node node = head;
		while(tempSize>0){
			if(obj.equals(node.data)){
				return node;
			}else{
				node = node.next;
			}
			tempSize--;
		}
		return null;
	}
	
	//删除指定元素的对应的节点
	public boolean deleteNode(Object obj){
		if(size == 0){
			return false;
		}
		Node firstNode = head;  //当前节点
		Node nextNode = head;   //后一个节点
		while(nextNode.data!=obj){
			if(nextNode.next == null){
				return false;
			}else{
				firstNode = nextNode;
				nextNode = nextNode.next;
			}
		}
		//如果是头结点的话
		if(nextNode == head){
			head = nextNode.next;
			size--;
		}else{
			firstNode.next = nextNode.next;
			size--;
		}
		return true;
	}
	
	//判断链表是否为空
	public boolean isEmpty(){
		if(size>0){
			return false;
		}else{
			return true;
		}
	}
	
	//打印链表
	public void display(){
		if(size>0){
			Node node = head;
			int tempSize = size;
			if(tempSize==1){
				System.out.print("["+node.data+"]");
				return ;
			}
			while(tempSize>0){
				if(node.equals(head)){
					System.out.print("["+node.data+"->");
				}else if(node.next==null){
					System.out.print(node.data+"]");
				}else{
					System.out.print(node.data+"->");
				}
				tempSize--;
				node = node.next;
			}
		System.out.println();
		}else{
			System.out.println("[]");
		}
	}
	
}

3.测试一下

	//测试
	@Test
	public void test(){
		SingleLinkedList list = new SingleLinkedList();
		list.addHead("A");
		list.addHead("B");
		list.addHead("C");
		list.addHead("D");
		list.addHead("E");
		list.addHead("F");
		list.display();
		list.deleteNode("C");
		list.display();
		System.out.println("node:"+list.find("F").data);
	}

结果:

[F->E->D->C->B->A]
[F->E->D->B->A]
node:F

猜你喜欢

转载自blog.csdn.net/ScongHW/article/details/83578547
今日推荐