两个方法可能存在一定的问题,毕竟每个人实现的不一样。
两个代码的思路可以参考,会有帮助的。

我写了代码二的一部分
对于 get 方法 Java LinkedList 默认下标从零开始

public E getNode(int index){
            Node get = this ;
        	for(int i = 0 ; i < index ; i++) {
        		get = this.next ;
        	}
            return (E) get.data;
      }
    //根据索引获取数据
    @Override
    public E get(int index) {
        if (index+1 > this.count || index < 0)//索引应该在范围内
            throw new IndexOutOfBoundsException("Index: "+ index+", Size: "+ this.count) ;
        return (E) this.root.getNode(index);
    }

方法一:

public class LinkedList<E> {

    private class Node{
        public E e;
        public Node next;

        public Node(E e, Node next){
            this.e = e;
            this.next = next;
        }

        public Node(E e){
            this(e, null);
        }

        public Node(){
            this(null, null);
        }

        @Override
        public String toString(){
            return e.toString();
        }
    }

    private Node dummyHead;
    private int size;

    public LinkedList(){
        dummyHead = new Node();
        size = 0;
    }

    // 获取链表中的元素个数
    public int getSize(){
        return size;
    }

    // 返回链表是否为空
    public boolean isEmpty(){
        return size == 0;
    }

    // 在链表的index(0-based)位置添加新的元素e
    // 在链表中不是一个常用的操作,练习用:)
    public void add(int index, E e){

        if(index < 0 || index > size)
            throw new IllegalArgumentException("Add failed. Illegal index.");

        Node prev = dummyHead;
        for(int i = 0 ; i < index ; i ++)
            prev = prev.next;

        prev.next = new Node(e, prev.next);
        size ++;
    }

    // 在链表头添加新的元素e
    public void addFirst(E e){
        add(0, e);
    }

    // 在链表末尾添加新的元素e
    public void addLast(E e){
        add(size, e);
    }

    // 获得链表的第index(0-based)个位置的元素
    // 在链表中不是一个常用的操作,练习用:)
    public E get(int index){

        if(index < 0 || index >= size)
            throw new IllegalArgumentException("Get failed. Illegal index.");

        Node cur = dummyHead.next;
        for(int i = 0 ; i < index ; i ++)
            cur = cur.next;
        return cur.e;
    }

    // 获得链表的第一个元素
    public E getFirst(){
        return get(0);
    }

    // 获得链表的最后一个元素
    public E getLast(){
        return get(size - 1);
    }

    // 修改链表的第index(0-based)个位置的元素为e
    // 在链表中不是一个常用的操作,练习用:)
    public void set(int index, E e){
        if(index < 0 || index >= size)
            throw new IllegalArgumentException("Set failed. Illegal index.");

        Node cur = dummyHead.next;
        for(int i = 0 ; i < index ; i ++)
            cur = cur.next;
        cur.e = e;
    }

    // 查找链表中是否有元素e
    public boolean contains(E e){
        Node cur = dummyHead.next;
        while(cur != null){
            if(cur.e.equals(e))
                return true;
            cur = cur.next;
        }
        return false;
    }

    // 从链表中删除index(0-based)位置的元素, 返回删除的元素
    // 在链表中不是一个常用的操作,练习用:)
    public E remove(int index){
        if(index < 0 || index >= size)
            throw new IllegalArgumentException("Remove failed. Index is illegal.");

        Node prev = dummyHead;
        for(int i = 0 ; i < index ; i ++)
            prev = prev.next;

        Node retNode = prev.next;
        prev.next = retNode.next;
        retNode.next = null;
        size --;

        return retNode.e;
    }

    // 从链表中删除第一个元素, 返回删除的元素
    public E removeFirst(){
        return remove(0);
    }

    // 从链表中删除最后一个元素, 返回删除的元素
    public E removeLast(){
        return remove(size - 1);
    }

    // 从链表中删除元素e
    public void removeElement(E e){

        Node prev = dummyHead;
        while(prev.next != null){
            if(prev.next.e.equals(e))
                break;
            prev = prev.next;
        }

        if(prev.next != null){
            Node delNode = prev.next;
            prev.next = delNode.next;
            delNode.next = null;
        }
    }

    @Override
    public String toString(){
        StringBuilder res = new StringBuilder();

        Node cur = dummyHead.next;
        while(cur != null){
            res.append(cur + "->");
            cur = cur.next;
        }
        res.append("NULL");

        return res.toString();
    }
}

方法二:

public class LinkImpl<E> implements ILink<E> {
    private class Node<E> {//保存节点的数据关系
        private E data; //保存节点的数据
        private Node next; //保存下一个引用
        public Node(E data){
            this.data=data;
        }
        //添加节点
        public void addNode(Node newNode){//保存新的Node数据
            if (this.next==null){
                this.next=newNode;
            }else
                this.next.addNode(newNode);
        }
        //转换数组
        public void toArrayNode(){
            LinkImpl.this.resultData[LinkImpl.this.foot++]=this.data;
            if (this.next!=null){//还有下一个数据
                this.next.toArrayNode();
            }
        }
        public E getNode(int index){
            if (LinkImpl.this.foot ++==index)
                return this.data;
            else
                return (E) this.next.getNode(index);
        }
        public void setNode(int index,E data){
            if (LinkImpl.this.foot ++==index)
                this.data=data;
            else
                this.next.getNode(index);
        }
        public boolean containsNode(E data){
            if (data.equals(this.data))//对象比较
                return true;
            else{
                if (this.next==null)//没有后续节点了
                    return false;
                else
                    return this.next.containsNode(data);
            }
        }
        public void removeNode(Node previous,E data){
            if (data.equals(this.data)){
                previous.next=this.next;//空出当前节点
            }else{
                if (this.next !=null){//有后续节点
                    this.next.removeNode(this,data);
                }
            }
        }
    }
    //--------------Link类中的成员---------
    private Node root;//保存根节点
    private int count;//记录链表长度
    private int foot;//记录数组脚标
    private Object[] resultData;//返回数组
    //-----添加元素的方法----------
    @Override
    public void add(E e) {
        if (e==null){//空数据直接返回
            return;
        }
        Node newNode = new Node(e);//创建一个新节点
        if (this.root==null)//没有根节点
            this.root = newNode;//第一个节点作为根节点
        else {
            this.root.addNode(newNode);
        }
        this.count++;//链表长度加1
    }
    //------遍历链表
//    @Override
//    public void print() {
//        Node root1 =root;
//        while (root1!=null){
//            System.out.println(root1.data);
//            root1 = root1.next;
//        }
//    }
    //----------数据增加的方法
    @Override
    public int size() {
        return this.count;
    }
    //判断链表是否为空
    @Override
    public boolean isEmpty() {
        return this.count==0;
    }

    //返回数组方法
    @Override
    public Object[] toArray() {
        if (this.isEmpty())//没有数据
            return null;
        this.foot=0;
        this.resultData=new Object[this.count];//根据已有长度开辟数组
        this.root.toArrayNode();
        return this.resultData;
    }

    //根据索引获取数据
    @Override
    public E get(int index) {
        if (index > this.count)//索引应该在范围内
            return null;
        this.foot=0;//重置索引下表
        return (E) this.root.getNode(index);
    }

    @Override
    public void set(int index, E data) {
        if (index >=this.count)
            return;
        this.foot=0;//重置索引下标
        this.root.setNode(index,data);
    }

    @Override
    public boolean contains(E data) {
        if (data ==null)//没有数据
            return false;
        return this.root.containsNode(data);
    }

    @Override
    public void remove(E data) {
        if (this.contains(data)){//判断数据是否存在
            if (this.root.data.equals(data)){//根节点是要删除的节点
                this.root=this.root.next;
            }else{
                this.root.next.removeNode(this.root,data);
            }
            this.count--;
        }
    }

    @Override
    public void clean() {
        this.root=null;//后续节点都为null
        this.count=0;
    }
}

测试代码

public class Demo {
    public static void main(String[] args) {
        LinkImpl<String> s=new LinkImpl<>();
        System.out.println("增加之前:"+s.size()+"、是否为空:"+s.isEmpty());
        s.add("hello");
        s.add("world");
        System.out.println("增加之后:"+s.size()+"、是否为空:"+s.isEmpty());
        System.out.println("------链表中存在的数据----");
        Object[] obj = s.toArray();
        for (Object ob:obj){
            System.out.println(ob);
        }
        System.out.println("--------获取数据--------");
        System.out.println(s.get(0));
        System.out.println(s.get(3));
        System.out.println("--------修改数据--------");
        s.set(0,"你好");
        Object[] obj2 = s.toArray();
        for (Object ob:obj2){
            System.out.println(ob);
        }
        System.out.println("--------判断对象是否存在-----");
        System.out.println(s.contains("你好"));
        System.out.println(s.contains("ni"));
        System.out.println("--------删除---------");
        s.remove("你好");
        Object[] obj3 = s.toArray();
        for (Object ob:obj3){
            System.out.println(ob);
        }
        System.out.println("-----链表清空-----");
        s.clean();
        System.out.println(s.size());
    }
}