Java语言实现链表

   链表的定义:

        我们都知道数组是用来存储某种数据类型的数据的,那么链表其实也是一样,用来存储某种数据类型的数据的,在Java中也可以是某个对象,链表这种数据结构,用起来他有自己的特点,我们都知道,数组在内存中是一块连续的存储空间,数组的长度也是固定的,那么在对数据进行操作的时候,比如我要在数组中间插入一个元素,那么在空间足够的情况下,后面的每一个元素都要向后移动,这样是不是很麻烦?就好比在医院排着一个很长的队,如果某个人插在中间去,那么后面的人是不是都要退一步?那么链表这种数据结构,就很完美的解决了这一问题。

     链表在内存中的存储形式:

       它在内存中可以不用是连续的,但是它不是简单存储一个元素,它除了存储本身的数据以外,还需要存储后续的存储位置,这样的一个小单位我们称之为节点。

     象这样由n个节点形成的一个线性表我们就称之为链表。

链表的基本操作:

     public void createNewNode(int a)    //创建一个链表节点

    public boolean deleteEle(int i)            //删除一个节点

    public boolean insertEle(int i, int data)   //在任意位置插入一个元素

    public void printList()                      //遍历整个链表 

    如何读取链表中的元素:

在链表中并没有下标,只能靠头指针来操作整个链表,链表的尾节点指针域为空。

代码:

	public void printList(){
		Node tem = head;
		while(tem != null){
			System.out.print(tem.d+"..");
			tem = tem.next;
		}
		System.out.println();
	}

链表中创建一个节点:

    这里采用的是头插法,只需要把头指针赋给新节点的指针域,然后使头指针指向新节点。

代码:

	public void createNewNode(int a){    //创建节点
		Node n = new Node(a);			//创建一个新的节点
		n.next = head;                  //头节点默认是空的,第一次调用就默认成为了尾节点,这里使用的是头插法
		head = n;
		size++;
	}

删除指定节点: 

 这里需要我们需要使用一个辅助指针变量,因为在进行删除的时候,需要把当前节点的指针域赋给前一个节点的指针域就可以实现了。

代码:

public boolean deleteEle(int i){
		if(i < 0 || i > size){
			return false;
		}
		Node Temp = head;
		Node CurrNode = Temp.next;
		
		if(CurrNode == null){
			head = null;
			size--;
			return true;
		}
		
		int j =1;
		while(CurrNode != null){
			if(j == i){
				Temp.next = CurrNode.next;
				CurrNode.next = null;
				size--;
				return true;
			}
			Temp = CurrNode;
			CurrNode = CurrNode.next;
			j++;
		}
		return false;
	}

/在任意位置插入一个元素:

这里需要注意的是,需要把下一个节点的地址保存下来,不然链表容易断,找不到后面的节点。 

代码:

	public boolean insertEle(int i, int data){
		if(i < 1 || i > size){
			return false;
		}
		
		int j = 1;
		if(i == 0){
			Node n = new Node(data); 
			n.next = head;
			head = n;
			size++;
		}
		Node CurrNode = head;
		Node Tem = null;
		while(CurrNode != null){
			if(i == j){
				Node n = new Node(data);
				Tem = CurrNode.next;
				CurrNode.next = n;
				n.next = Tem;
				size++;
				return true;
			}
			
			CurrNode = CurrNode.next;
			j++;
		}
		
		return false;
	}

猜你喜欢

转载自blog.csdn.net/xhl1123456789/article/details/89059792