单链表

单链表

单链表的结构是前一级的NEXT域
指向下一级的头节点,连接成为一个单链表,如图所示。
在这里插入图片描述
第一个节点 头节点不储存信息。最后一个节点没有NEXT域。

每个节点的NEXT只是用来指向下一个节点,一级一级往下传递。

上部分用来存储信息。

比如 b=a.next; c=b.next.

单链表结构的插入(头插,尾插,指定位置插入);查找;删除;
首先定义一个Entry类

package com.tulun.src1;
class Entry<T>{//定义单链表结构
        private T value;
        private Entry next;
        public Entry(){
                next=null;
        }
        public Entry(T value){
                this.value=value;
                this.next=null;
        }
       
        }

然后在Entry类中实现各种操作(增删补差等。。)

 class MyLinedList<T> {
                private Entry head; //头节点
                private int size; //单链表的长度

                public MyLinedList() {
                        head=new Entry();
                }

                public void insertHead(T value) {//头节点插入,先连接后面的,防止断掉
                        Entry entry=new Entry();
                        entry.next=head.next;
                        head.next=entry;
                }

                public void insertTail(T value) {//尾节点插入
                        Entry entry=new Entry();
                        Entry i;
                        for (i=head; i.next == null; i=i.next) {
                                i.next=entry;
                        }
                }

                public void insert(int pos, T value) {//按位置插入,先判断位置是否合理
                        if (pos < 1 || pos > size - 1) {
                                return;
                        }
                        Entry entry=new Entry();//新节点
                        entry.value=(Comparable) value;
                        int i;
                        Entry n=head;
                        for (i=0; i < pos - 1; i++) {
                                n=n.next;
                        }
                        entry.next=n.next;
                        n.next=entry;
                }

                public int getSize(Entry a) {//获得单链表的长度
                        int count=0;
                        for (Entry entry=head.next; entry != null; entry=entry.next) {
                                count++;

                                size=count;
                        }
                        return size;
                }

                public void remove(T value) {//删除指定的元素,value
                        for (Entry entry=head.next; entry != null; entry=entry.next) {
                                if (entry.next.value == value) {//如果存在指定元素
                                        Entry p=entry.next;
                                        entry.next=p.next;
                                        p.value=null;
                                        break;
                                } else {//不存在指定的元素
                                        return;
                                }
                        }
                }

                public boolean circle() {//判断单链表是否有环
                        Entry p=new Entry();
                        Entry q=new Entry();
                        while (p != null && q != null) {
                                p=p.next;
                                q=p.next.next;
                                if (q == p) {
                                        return true;
                                }
                        }
                        return false;
                }
        }
//               {//判断是否有环??
//                        Entry p=head.next;
//                        Entry q=head.next;
//                        for (Entry entry=head.next;entry!=null;entry=entry.next){
//                                p=p.next;
//                                q=q.next.next;
//                                if (p==q){
//                                        return true;
//                                }
//                        }
//                        return false;
//                }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值