简单版本建立List:v1


  1. 简单的List功能实现,v1
public class SLList_1{
    public static class IntNode{
        public int item;
        public IntNode next;

        public IntNode(int i, IntNode n){
            item = i;
            next = n;
        }
    }
    public IntNode first;
    public int size;

    public SLList_1(){
        first = null;
        size = 0;
    }
    public SLList_1(int x){
        first = new IntNode(x, null);
        size = 1;
    }
    public void addFirst(int x){
        first = new IntNode(x, first);
        size += 1;
    }
    public void addLast(int x){
        size += 1;
        if(first == null){
            first = new IntNode(x, null);
        }
        IntNode p = first;
        if (p.next != null){
            p = p.next;
        }
        p.next = new IntNode(x, null);
    }
    public int getSize(){
        return size;
    }

    public static void main(String[] args) {
        SLList_1 L = new SLList_1(5);
        L.addFirst(10);
        L.addLast(1);
        System.out.println(L.getSize());
    }
}

Q&A:

  1. 在addLast方法中:
    为什么此处要用一个哨兵p?
    --如果直接利用first = first.next,那么first前面的数都会丢失。
    为什么哨兵p=p.next不会使得first改变?
    --哨兵p和first共享一个地址。地址开头就在那,p沿着地址跳动,但first指向的仍然是地址的开头。故不会影响
    为什么哨兵p.next=new IntNode(x, null)会使得first后加一个x?
    --哨兵p沿着的是和first共有的地址链。故p添加后,会使得first后加x。