新手努力实现的--链表

package Mynode;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: czt20
 * Date: 2025 -12-09
 * Time: 8:21
 */
public class MyListnode implements IList{
    static class myliistnode{
      public int val;
      public myliistnode next;

        public myliistnode(int val) {
            this.val = val;
        }
    }
     public myliistnode head;
    public void creatlist(){
        myliistnode node1=new myliistnode(12);
        myliistnode node2=new myliistnode(23);
        myliistnode node3=new myliistnode(34);
        myliistnode node4=new myliistnode(45);
        myliistnode node5=new myliistnode(56);
        node1.next=node2;
        node2.next=node3;
        node3.next =node4;
        node4.next=node5;
        head=node1;
    }

    public  myliistnode middlenode(){
        if (head ==null){
            return null;
        }
        myliistnode fast=head;
        myliistnode slow=head;
        while(fast !=null && fast.next!=null){
            fast=fast.next.next;
            slow=slow.next;
        }
        return slow;
    }
    public void resverlist(){
        if (head==null){
            return;
        }
        myliistnode cur=head.next;
        head.next=null;
        while (cur != null){
            myliistnode curN=cur.next;
            cur.next=head;
            head=cur;
            cur=curN;
        }
        return;
    }
    @Override
    public void display() {
        myliistnode ct=head;
        while(ct!=null){
            System.out.print(ct.val+" ");
            ct=ct.next;
        }
    }

    @Override
    public void addFirst(int data) {
        myliistnode node=new myliistnode(data);
        node.next=head;
        head=node;
    }

    @Override
    public void addLast(int data) {
        if (head==null){
            myliistnode node = new myliistnode(data);
            head=node;
        }else {
            myliistnode cur = head;
            while (cur.next != null) {
                cur = cur.next;
            }
            myliistnode node = new myliistnode(data);
            cur.next = node;
        }
    }

    @Override
    public void addIndex (int index, int data)throws overread {
        int len=size();
                try{
                    if (index<0||index>len){
                        throw  new overread();
                    }
        }catch (Exception e){
            System.out.println("输入错误!!!!");
            e.getMessage();
        }
       if (index==0){
           addFirst(data);
           return;
       }
       if (index==len){
           addLast(data);
           return;
       }
       //中间插入
        myliistnode node=new myliistnode(data);
        myliistnode cur =head;
        while (index-1!=0){
            cur=cur.next;
            index--;
        }
        node.next=cur.next;
        cur.next=node;

    }

    @Override
    public boolean contains(int key) {
        myliistnode cur =head;
        while (cur!=null){
            if (cur.val==key){
                return  true;
            }
            cur=cur.next;
        }
        return false;
    }

    @Override
    public void remove(int key) {
     if (head==null){
         return;
     }
     if (head.val==key){
         head=head.next;
         return;
     }
     myliistnode cur=tofindremovenode(key);
     if (cur==null){
         System.out.println("没有找到要删除的数!!!!");
         return;
     }
     myliistnode delt=cur.next;
     cur.next=delt.next;
    }
   private myliistnode tofindremovenode(int key){
        myliistnode cur=head;
        while (cur.next!=null){
            if (cur.next.val==key){
                return cur;
            }
            cur=cur.next;
        }
        return  null;
   }
    @Override
    public void removeAlley(int key) {
     if(head==null){
         System.out.println("链表错误!!!");
         return;
     }
     myliistnode prev=head;
     myliistnode cur = prev.next;
     while (cur!=null){
         if (cur.val==key){
             prev.next=cur.next;
             cur=cur.next;
         }else {
             prev=cur;
             cur=cur.next;
         }
     }
     if (head.val==key){
         head=head.next;
     }
    }

    @Override
    public int size() {
        myliistnode cur=head;
        int count=0;
        while(cur!=null){
          count++;
          cur=cur.next;
        }
        return count;
    }

    @Override
    public void clear() {

        head.next=null;
        head=null;
    }
    public static void main(String[] args) {
    MyListnode a=new MyListnode();
        a.addFirst(1);
        a.addFirst(2);
        //a.addFirst(3);
        a.addFirst(4);
        a.addFirst(5);
        a.display();
        System.out.println();
        MyListnode.myliistnode b=a.middlenode();
        System.out.println(b.val);
    }
}

package Mynode;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: czt20
 * Date: 2025 -12-09
 * Time: 21:59
 */
public class overread extends RuntimeException{
    public overread(){
        super();
    }
   public  overread(String s){
        super(s);
   }

}

package Mynode;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: czt20
 * Date: 2025 -12-09
 * Time: 8:21
 */
public interface IList {
    public void addFirst(int data);
    public void addLast(int data);
    public void addIndex(int index,int data);
    public boolean contains(int key);
    public void remove(int key);
    public void removeAlley(int key);
    public int size();
    public void clear();
    public void display();
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务