单链表MysigleList和双向链表LinkedList

public interface IList {
    public void addStart(int val);
    public void addLast(int val);
    public void display();
    public Boolean isContain(int val);
    public void addIndex(int key,int val);
    public void remove(int val);
    public void removeAllval(int val);
}

单链表顾名思义就是只有一个方向的链表。

单链表的实现:

1.先确定链表中有什么?答:节点。//可以使用内部类的方式定义。

2.确定链表中有什么域,我们先简单的给予其值域val,指针域next。

3.确定链表中要实现的方法。//可以定义一个接口。

4.最终在测试类中串联实现你想干的事。

如下面代码:

注意:

1.void addstart(int val);                                           为头插入法

2.void addlast(int val);                                            为尾部插入法

3.void display();                                                      打印链表中的val值

4.Boolean isContained(int val)                                判断链表中是否存在val这个值

5.void addIndex(int key,int val)                               在第key个数中插入val值的结点

第五个方法要重点注意一下,当key==0时要调用addstart方法。当key==length()-1时要调用addlast方法。同时也要判断key的值是否合法

6.void remove(int val)                                         删除链表中第一次出现和val值相等的结点

7.void removeAllval                                                 删除链表中所有与val值相等的结点

8.int length()                                                            计算链表的长度

public class Test {
    public static void main(String[] args) {
        MysigleList List=new MysigleList();
        List.addStart(3);
        List.addStart(4);
        List.addStart(5);
        List.addStart(6);
        List.addStart(0);
        List.addStart(0);
        List.display();
        System.out.println("==============");
        List.addIndex(1,10);
        List.display();
        System.out.println("================");
        List.addIndex(0,1);
        List.display();
        System.out.println("==============");
        List.remove(0);
        List.display();
        System.out.println("===========");
        List.removeAllval(0);
        List.display();
    }
}
public interface IList {
    public void addStart(int val);
    public void addLast(int val);
    public void display();
    public Boolean isContain(int val);
    public void addIndex(int key,int val);
    public void remove(int val);
    public void removeAllval(int val);
}
public class MysigleList implements IList{
    static class Listnode{
        public int val;
        public Listnode next;
        public Listnode(int val) {
            this.val = val;
        }
    }
    public Listnode head;
    public void addStart(int val){
        Listnode cur=new Listnode(val);
        cur.next=this.head;
        head=cur;
    }
    public void addLast(int val){
        Listnode cur=head;
        while(cur.next!=null){
            cur=cur.next;
        }
        Listnode node=new Listnode(val);
        cur.next=node;
        node.next=null;
    }
    public void display(){
        Listnode cur=head;
       while(cur!=null){
           System.out.println(cur.val);
           cur=cur.next;
       }
    }
    public Boolean isContain(int val){
        Listnode cur=head;
        while(cur!=null) {
            if (cur.val == val) {
                return true;
            }
            cur=cur.next;
        }
        return false;
    }
    public void addIndex(int key,int val){
        Listnode cur=head;
        if(key<0||key>=Listlength()){
            return;
        }
        if(key==0){
            addStart(val);
            return;
        }
        if(key==Listlength()-1){
            addLast(val);
            return;
        }
        while(key-1>0){
            cur=cur.next;
            key--;
        }
        Listnode node=new Listnode(val);
        node.next=cur.next;
        cur.next=node;
    }
    private int Listlength(){
        Listnode cur=head;
        if(head==null){
            return -1;
        }
        int count=0;
        while(cur!=null){
            count++;
            cur=cur.next;
        }
        return count;
    }
    public void remove(int val){
        Listnode cur=head;
        if(head==null){
            return;
        }
        while(cur.next!=null){
            if(head.val==val){
                head=cur.next;
                return;
            }
            if(cur.next.val==val){
                cur.next=cur.next.next;
                cur=cur.next;
                return;
            }
            cur=cur.next;
        }
        System.out.println("链表中未找到该数!!!!");
    }
    public void removeAllval(int val){
        Listnode cur=head;
        if(head==null){
            return;
        }

        while(cur.next!=null){
            if(head.val==val){
                head=cur.next;
            }
            if(cur.next.val==val){
                cur.next=cur.next.next;
            }
            cur=cur.next;

        }
    }

}

双向链表顾名思义就是有两个方向。

双链表的实现:

1.双链表中有三个域,分别是值域,next域(指向下一个结点),prev域(指向上一个结点)。

2.确定链表中要实现的方法。//可以定义一个接口。

3.最终在测试类中串联实现你想干的事。

如下列代码:

public interface IList {
    public void addStart(int val);
    public void addLast(int val);
    public void display();
    public Boolean isContain(int val);
    public void addIndex(int key,int val);
    public void remove(int val);
    public void removeAllval(int val);
}
public class Test {
    public static void main(String[] args) {
    LinkedList List=new LinkedList();
    List.addLast(5);
    List.addLast(4);
    List.addLast(3);
    List.addLast(2);
    List.addLast(1);
    List.addLast(8);
    List.display();
    System.out.println(List.isContain(0));
    List.addIndex(1,8);
    List.display();
        System.out.println("+=========");
    List.remove(8);
    List.display();
        System.out.println("============");
    List.removeAllval(8);
    List.display();
    }
}
public class LinkedList implements IList{
    static class Listnode{
        public int val;
        public Listnode prev;
        public Listnode next;
        public Listnode(int val) {
            this.val = val;
        }
    }
    public Listnode head;
    public Listnode last;
    public void addStart(int val){
        Listnode cur=new Listnode(val);
       if(head==null){
           head=last=cur;
       }else{
           cur.next=head;
           head.prev=cur;
           head=cur;
       }
    }
    public void addLast(int val){
        Listnode cur=new Listnode(val);
        if(last==null){
         head=last=cur;
          }else{
            cur.prev=last;
            last.next=cur;
            last=cur;
        }
    }
    public void display(){
        Listnode cur=head;
        while(cur!=null){
            System.out.println(cur.val+" ");
            cur=cur.next;
        }

    }
    public Boolean isContain(int val){
        Listnode cur=head;
        while(cur!=null){
            if(cur.val==val){
                return true;
            }
            cur=cur.next;
        }
        return false;
    }
    public void addIndex(int key,int val){
        Listnode cur=head;
        Listnode node=new Listnode(val);
        if(key<0||key>Listlength()-1){
            return;
        }
        if(key==0){
            addStart(val);
            return;
        }
        if(key==Listlength()-1){
            addLast(val);
            return;
        }
        while(key>0){
            cur=cur.next;
            key--;
        }
        cur.prev.next=node;
        node.prev=cur.prev;
        cur.prev=node;
        node.next=cur;
    }
    private int Listlength(){
        LinkedList.Listnode cur=head;
        if(head==null){
            return -1;
        }
        int count=0;
        while(cur!=null){
            count++;
            cur=cur.next;
        }
        return count;
    }
    public void remove(int val){
        Listnode cur=head;
        Listnode end=last;
        while(cur!=null){
            if(head.val==val){
                head=head.next;
                if(head!=null){
                    head.prev=null;
                }
                return;
            }
            if(last.val==val){
                last=last.prev;
                last.next=null;
                return;
            }
            if (cur.val == val) {
                cur.prev.next = cur.next;
                cur.next.prev = cur.prev;
                return;
            }
            cur=cur.next;

        }
    }
    public void removeAllval(int val){
        Listnode cur=head;
        Listnode end=last;
        while(cur!=null){
            if(head.val==val){
                head=head.next;
                if(head!=null){
                    head.prev=null;
                }
            }
            if(last.val==val){
                last=last.prev;
                last.next=null;
            }
            if (cur.val == val) {
                cur.prev.next = cur.next;
                cur.next.prev = cur.prev;
            }
            cur=cur.next;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值