您的位置:首页 > 编程语言 > Java开发

java创建单链表及增删改查功能实现

2017-10-12 11:24 387 查看
单链表节点类描述如下
public class Node {
        public Object data;    //存放节点值  
        public Node next;      //后继节点的引用 ,将data,next定义为public类型,就不需要get,set方法了
        public Node(){  
            this(null,null);    //无参时构造函数  
        }  
        public Node(Object data){  //带一个参数时的构造函数  
            this.data=data;  
        }  
        public Node(Object data,Node next){    //带两个参数时构造函数  
            this.data=data;  
            this.next=next;  
        }  
}
单链表类的描述

public class Linklist {
     private Node head;          //单链表的头指针  
        public Linklist(){          //单链表构造函数  
            head=new Node();         //初始化头结点  
        }  
        public void clear(){          //将一个已经存在的带头结点的单链表置成空表  
            head.next=null;
            head.data=null;
        }  
        public boolean isEmpty(){    //判断带头结点的单链表是否为空  
            return head.next==null;  
        }  
        public int length(){       //求带头结点单链表的长度  
            int length=0;  
            Node p=head.next;  
            while(p!=null){  
                p=p.next;  
                length++;  
            }  
            return length;  
        }  
        public Object get(int i)throws Exception{   //查找带头结点的单链表中的第i个结点  
            int j=0;  
            Node p=head.next;  
            while(j<i&&p!=null){  
                p=p.next;  
                j++;  
            }  
            if(j>i||p==null)  
                throw new Exception("查找位置不合理");  
        return p.data;  
    }  
        public int indexof(Object x){      //在带头结点的单链表中查找值为x的结点  
            int j=0;  
            Node p=head.next;  
            while(p!=null&&!p.data.equals(x)){  
                p=p.next;  
                j++;  
            }  
            if(p!=null)  
                return j;  
            else  
                return -1;  
        }  
        public void insert(int i,Object x)throws Exception{   //在带头结点的单链表中的第i个结点之前插入值为x的新结点  
            Node p=head;  
            int j=0;  
            while(j<i&&p!=null){  
                p=p.next;  
                j++;  
  
4000
         }  
            if(j>i||p==null)  
                throw new Exception("插入位置不合理");  
            Node s=new Node(x);  
            s.next=p.next;  
            p.next=s;  
        }  
        public void remove(int i)throws Exception{     //删除带头结点的单链表中第i个结点  
            Node p=head;   //p一定要等于head;不能等于head.next
            int j=0;  
            while(p.next!=null&&j<i){  
                p=p.next;  
                j++;  
            }  
            if(j>i||p==null)  
                throw new Exception("删除位置不合理");  
            p.next=p.next.next;
        }  
        public void display(){             //输出单链表中所有结点  
            Node p=head.next;  
            while(p!=null){  
                System.out.print(p.data+" ");  
                p=p.next;  
            }
            System.out.println();
        }  
        
        //测试用例,实现单链表增删改查功能
        public static void main(String[] args)throws Exception{  
            Linklist L=new Linklist();     //创建一个空的链表  
            for(int i=0;i<5;i++)  
                L.insert(i,i);  
            System.out.println("输出单链表");  
            L.display();  
            System.out.println("查找单链表中第2个位置元素");  
            System.out.println(L.get(2));  
            System.out.println("查找单链表中元素是2的位置");  
            System.out.println(L.indexof(2));  
            System.out.println("删除单链表中第2个位置元素");  
            L.remove(2);  
            System.out.println("删除成功");  
            L.display();  
        }  
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: