单链表基本操作

       为解决顺序表在插入,删除元素效率低的情况,引入单链表。单链表:使用引用将存储数据单元一次串联起来,避免了数组中用连续的内存存储元素的特点。在每个单元中有两个域,一个用于存储数据,一个用于指向下一个单元的引用。将这种具有一个数据域和多个指针域的存储单元成为节点。

public class MyLinkList<T> {
    class Entry{
        private T data;
        private Entry next;
        public Entry(){
            this.next = null;
        }
        public Entry(T data){
            this.data = data;
            this.next = next;
        }
    }
    private Entry head;
    private int size;
    public MyLinkList(){//初始化头节点
        this.head = new Entry();
    }

    public int getSize() {
        Entry p = head;
        int length = 0;
        while(p.next != null) {
            length++;
            p = p.next;
        }
        return length;
    }
    public void insert(int pos,T data){
       Entry p = new Entry(data);
        Entry q = head;
        int count = 0;
        for(int i = 0;i < pos-1;i++){//找到插入位置的前驱
            count++;
            q = q.next;
        }
        p.next = q.next;
        q.next = p;

    }
    public void remove(T data){//按值删除
        Entry p = head.next;
        while(p != null){//删除位置前驱
            if(p.next.data == data){
                Entry q = p.next;
                p.next = p.next.next;
                q.data = null;
            }
            p = p.next;
        }

    }
    public void change(T olddata,T newdata){//改值
        Entry p = head;
        while(p.next != null){
            if(p.next.data == olddata){
                p.next.data = newdata;
            }
            p = p.next;
        }
    }
    public boolean findValue(T data){//查找
        Entry p = head;
        while(p.next != null){
            if(p.next.data == data){
                return true;
            }
            p = p.next;
        }
        return false;
    }
    public void show(){
        Entry p = head;
        for(p = head.next;p != null;p = p.next){
            System.out.println("value:"+p.data);
        }
    }
    public static void main(String[] args){
        MyLinkList<Integer> l = new MyLinkList<>();
        l.insert(0,4);
        l.insert(0,1);
        l.insert(1,8);
        l.show();
//        System.out.println(l.findValue(6));
//        l.change(4,3);
//        l.show();
        l.remove(4);
        l.show();

    }
}

以上为单链表的基本操作(增删改查),关于逆置,合并等操作详见下一篇博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值