自己用20分钟java实现的单向链表(含有增删改查操作)

package test1;
// 建立一个链表结构
public class SingleList {
    //定义头结点指针
    Node head = null;
    //定义链表的节点数据结构
    class Node{
        int val;
        Node next;
        public Node(int val){
            this.val = val;
            next = null;
        }
    }
     //在链表的尾部增加一个节点
    public void add(int num){ 
        Node node = new Node(num);
        if(head==null)
            head=node;
        else
            search().next=node;
    }
    //获得链表尾部的节点
    public Node search(){       
        Node nodelast = head;
        while(nodelast.next!=null){
            nodelast = nodelast.next;
        }
        return nodelast;
    }
    //实现查找链表中特定的某个节点的数据为num并且返回该节点
    public  Node search(int num){ 
        Node nodelast = head;
        while(nodelast.next!=null){
            if(nodelast.val==num)
                return nodelast;
            nodelast = nodelast.next;
        }
        return null;
    }
    //实现查找链表中特定的某个节点下一个节点的数据为num并且返回该节点
    public  Node searchprevious(int num){ 
        Node nodelast = head;
        while(nodelast.next!=null){
            if(nodelast.next.val==num)
                return nodelast;
            nodelast = nodelast.next;
        }
        return null;
    }
    //更改链表中的操作
    public void change(int num,int numnew){
        if(search(num)!=null)
            search(num).val=numnew;
    }
    //删除链表的某个节点
    public void delete(int num){
        if(search(num)!=null)
        searchprevious(num).next = search(num).next;
    }
    //打印链表
    public void printList(){
        Node cur = head;
        while(cur!=null){
            System.out.println(cur.val);
            cur=cur.next;
        }
    }
    public static void main(String[] args) {
        SingleList singlelist = new SingleList();
        singlelist.add(1);
        singlelist.add(2);
        singlelist.add(3);
        singlelist.add(4);
        singlelist.change(3,8);
        singlelist.delete(8);
        singlelist.printList();
//        while(singlelist.head!=null){
//            System.out.println(singlelist.head.val);
//            singlelist.head=singlelist.head.next;
//        }
    }

}

注意事项 1 在SingleList中定义一个head节点   2 注意如何实现链表删除操作的    3  疑问 在任何非main的函数中都可以 使用Node node = new Node(num);但是为何

在main函数中就不行了呢。我知道这是内部类的范畴