简体   繁体   中英

Generic linked-list remove, size, get methods

I have just seen this wonderful code from this question "Generic Linked List in java" here on Stackoverflow. I was wandering on how do you implement a method remove (to remove a single node from the linkedlist), size (to get the size of list) and get (to get the a node). Could someone please show me how to do it?

public class LinkedList<E> {
private Node head = null;

private class Node {
    E value;
    Node next;

    // Node constructor links the node as a new head
    Node(E value) {
        this.value = value;
        this.next = head;//Getting error here
        head = this;//Getting error here
    }
}

public void add(E e) {
    new Node(e);
}

public void dump() {
    for (Node n = head; n != null; n = n.next)
        System.out.print(n.value + " ");
}

public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<String>();
    list.add("world");
    list.add("Hello");
    list.dump();
}

}

Your implementation of LinkedList for operation remove() , size() and contains() looks like this:

static class LinkedList<Value extends Comparable> {

        private Node head = null;
        private int size;

        private class Node {
            Value val;
            Node next;

            Node(Value val) {
                this.val = val;
            }
        }

        public void add(Value val) {
            Node oldHead = head;
            head = new Node(val);
            head.next = oldHead;
            size++;
        }

        public void dump() {
            for (Node n = head; n != null; n = n.next)
                System.out.print(n.val + " ");
            System.out.println();
        }

        public int size() {
            return size;
        }

        public boolean contains(Value val) {
            for (Node n = head; n != null; n = n.next)
                if (n.val.compareTo(val) == 0)
                    return true;
            return false;
        }

        public void remove(Value val) {
            if (head == null) return;
            if (head.val.compareTo(val) == 0) {
                head = head.next;
                size--;
                return;
            }

            Node current = head;
            Node prev = head;
            while (current != null) {
                if (current.val.compareTo(val) == 0) {
                    prev.next = current.next;
                    size--;
                    break;
                }
                prev = current;
                current = current.next;
            }
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM