簡體   English   中英

通用鏈表刪除、大小、獲取方法

[英]Generic linked-list remove, size, get methods

我剛剛在 Stackoverflow 上看到了這個問題“Java 中的通用鏈接列表”中的精彩代碼。 我一直在思考如何實現方法 remove(從鏈表中刪除單個節點)、size(獲取列表的大小)和 get(獲取 a 節點)。 有人可以告訴我怎么做嗎?

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();
}

}

您對操作remove()size()contains()的 LinkedList 實現如下所示:

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;
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM