欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA双向链表的构建 链表数据结构双向链表增删改查节点类 

程序员文章站 2024-02-13 10:21:10
...



      直接进入主题,要想自己构建一个双向链表就得知道双向链表的构成,既然是链表,很容易让人联想到链条,其实就是和链条差不多的结构,很形象,那就让我们来看看节点的结构,图画得有些难看不要打我。   JAVA双向链表的构建
            
    
    
        链表数据结构双向链表增删改查节点类 

 

     双向链表的结构:由若干个节点组成,每个节点有三个属性,一个是指向前一个节点的,一个是存储该节点数据的,一个是指向后一个节点的。从图可知,链表是由节点组成,那么就要先声明节点:

     节点的声明:这里以数据类型为String类型来举例

    

/**
	 * 定义节点类
	 * @author Administrator
	 *
	 */
	class Node{
		String data;
		Node next;
		Node front;
		/**
		 * 构造函数
		 * @param data 节点的数据 
		 */
		public Node(String data)
		{
			this.data=data;
		}	
	}

       声明好节点后就可以来声明链表类了:

       双向链表的属性:

             Node   head;------------>头节点

             Node   tail;--------------->尾节点

             int        count;----------->计算节点个数

     既然是链表就得有一些方便我们用的方法:增、删、改、查

     上代码:         

package jhf.linklist;


/**
 * 我的链表类
 * 双向链表
 * @author Administrator
 *
 */
public class MyLinkList {
	
	Node head;//头节点
	Node tail;//尾节点
	int count;//节点的个数
	/**
	 * 添加指定元素到链表的尾部
	 * @param s  要添加的元素
	 */
	public void add(String s)
	{
		//根据元素创建一个新节点
		Node n=new Node(s);
		if(head==null)
		{
			head=n;
		}else{
			
			tail.next=n;
			n.front=tail;
		}
		tail=n;
		count++;
	}
	/**
	 * 取出指定位置的节点
	 * @param index  要取出节点的位置
	 * @return  返回的是该位置的节点
	 */
	public Node getNode(int index)
	{
		//下标越界处理
		if (index < 0 || index >= size()) {
			throw new RuntimeException("下标越界");
		}
		int num = 0;// 寻找的下标
		Node n=head;//从头结点开始寻找
		while (n != null) {
			if (num == index) {
				break;
			}
			num++;
			n = n.next;
		}
		
		return n;
	}
	
	/**
	 * 根据下标得到元素值的方法
	 * @param index  要得到元素的下标
	 * @return  返回的是这个元素的值
	 */
	public String  get(int index)
	{
		//下标越界处理
		if (index < 0 || index >= size()) {
			throw new RuntimeException("下标越界");
		}
		int num = 0;// 寻找的下标
		Node n=head;//从头结点开始寻找
		while (n != null) {
			if (num == index) {
				break;
			}
			num++;
			n = n.next;
		}
		// 获得该节点的元素
		String s = n.data;
		
		return s;
	}
	/**
	 * 根据元素值得到这个节点的方法
	 * @param s   元素
	 * @return  与该值相对应的节点
	 */
	public Node getNode(String s)
	{
		int unm=0;//计数器
		String ss=head.data;
		if(s==ss){//如果要找的就是头节点
			//System.out.println("已经得到下标"+unm);测试得到的下标是否正确时用的语句
			Node n=getNode(unm);//根据下标得到节点  该方法已经在上面实现并测试挣钱  可以直接调用 
			//System.out.println("找到元素:"+n.data+"的节点啦!");测试找到的元素是否正确的时候用的语句
			return head;
		}
		else//如果找到的不是头节点
		{
			unm=1;
			ss=get(unm);
			while(ss!=s)
			{
				if(ss==s) break;
				unm++;
				ss=get(unm);
			}
		}
		//System.out.println("已经得到下标"+unm);测试得到的下标是否正确时用的语句
		Node n=getNode(unm);//根据下标得到节点  该方法已经在上面实现并测试挣钱  可以直接调用 
		//System.out.println("找到元素:"+n.data+"的节点啦!");测试找到的元素是否正确的时候用的语句
		return n;
		
	}
	/**
	 * 将指定的元素添加到指定的位置
	 * @param s  要添加的元素
	 * @param index  要添加到的位置
	 */
	public void add(String s,int index)
	{
		//判断下标是否越界
		if (index < 0 || index >= size()) {
			throw new RuntimeException("下标越界");
		}
		int num= 0;//用来寻找的下标
		Node n=head;//从头节点开始寻找
		while(n!=null){
			if(num==index){
				break;
			}
			num++;
			n=n.next;
		}
		Node nn=new Node(s);
		if(n==tail)
		{
			n.next=nn;
			nn.front=n;
			tail=nn;
		}else{
		nn.next=n.next;
		n.next.front=nn;		
		n.next=nn;
		nn.front=n;
		}
		count++;
		
	}

	/**
	 * 删除指定位置的元素
	 * @param s  要删除的元素的下标
	 */
	public void delete(int index)
	{
		Node n=getNode(index);
		if(n==tail)//如果找到的该节点是尾节点
		{
			n.front.next=null;	
		}else{
		n.front.next=n.next;
		n.next.front=n.front;
		}
		count--;
	}
	/**
	 * 删除指定元素
	 * @param s  要删除的元素
	 */
	public void delete(String s){
		Node n=getNode(s);
		if(n==tail)//如果找到的该节点是尾节点
		{
			n.front.next=null;	
		}else{
		n.front.next=n.next;
		n.next.front=n.front;
		}
	count--;
	
	}
	
	
	
	 public int size(){
		return count;
	}
	
	// 传入头节点取出链表中的所有元素
		public void printList(Node n) {
			if (n != null) {
				String s = n.data;
				System.out.println(s);
				printList(n.next);
			}
		}
	
	
	
	/**
	 * 定义节点类
	 * @author Administrator
	 *
	 */
	class Node{
		String data;
		Node next;
		Node front;
		/**
		 * 构造函数
		 * @param data 节点的数据 
		 */
		public Node(String data)
		{
			this.data=data;
		}	
	}

}

 

 

  • JAVA双向链表的构建
            
    
    
        链表数据结构双向链表增删改查节点类 
  • 大小: 127.1 KB