当然可以!以下是在保持代码功能不变的前提下简化代码的版本:

import java.util.HashSet;

public class CirDoublyList2<T> {
    private Node<T> head;
    private Node<T> tail;

    private static class Node<T> {
        T data;
        Node<T> prev;
        Node<T> next;

        Node(T data) {
            this.data = data;
        }
    }

    public boolean isEmpty() {
        return head == null;
    }

    public void insert(T data) {
        Node<T> newNode = new Node<>(data);

        if (isEmpty()) {
            head = newNode;
            tail = newNode;
        } else {
            newNode.next = head;
            newNode.prev = tail;
            head.prev = newNode;
            tail.next = newNode;
            head = newNode;
        }
    }

    public boolean containsAll(CirDoublyList2<T> list) {
        HashSet<T> set = new HashSet<>();

        Node<T> current = head;
        while (current != tail) {
            set.add(current.data);
            current = current.next;
        }
        set.add(tail.data);

        current = list.head;
        while (current != list.tail) {
            if (!set.contains(current.data)) {
                return false;
            }
            current = current.next;
        }
        return set.contains(current.data);
    }

    public String toString() {
        if (isEmpty()) {
            return "[]";
        }

        StringBuilder sb = new StringBuilder();
        sb.append("[");

        Node<T> current = head;
        do {
            sb.append(current.data).append(",");
            current = current.next;
        } while (current != tail);

        sb.append(tail.data).append("]");
        return sb.toString();
    }

    public static void main(String[] args) {
        CirDoublyList2<Integer> list1 = new CirDoublyList2<>();
        list1.insert(1);
        list1.insert(2);
        list1.insert(3);

        CirDoublyList2<Integer> list2 = new CirDoublyList2<>();
        list2.insert(2);
        list2.insert(3);
        list2.insert(4);

        System.out.println("list1:" + list1.toString());
        System.out.println("list2:" + list2.toString());

        boolean containsAll = list1.containsAll(list2);
        System.out.println("List1 contains all list2: " + containsAll);
    }
}

在简化的版本中,我进行了以下更改:

  • 删除了不必要的tail.prev = headhead.next = tail的赋值,因为在insert方法中已经处理了这些连接。
  • toString方法中,使用了do-while循环来遍历链表,这样可以更简洁地处理最后一个元素的输出。

这些更改不仅使代码更简洁,而且不会影响代码的功能和正确性。

Java循环双链表代码简化优化 - 提高代码效率和可读性

原文地址: https://www.cveoy.top/t/topic/QoH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录