以下是使用Java语言编写的CirDoublyList类,其中包含了for循环、insert方法、CirDoublyList构造函数、toString方法、isEmpty方法和insert(int i, T x)方法。附带了一个用于验证的main函数。
public class CirDoublyList<T> {
private DoubleNode<T> head; // 头结点
// 构造函数,创建一个空的循环双链表
public CirDoublyList() {
head = new DoubleNode<>();
head.prev = head;
head.next = head;
}
// 在指定位置插入元素
public DoubleNode<T> insert(int i, T x) {
if (x == null)
throw new NullPointerException("x == null");
DoubleNode<T> front = getNode(i - 1); // 前驱节点
DoubleNode<T> newNode = new DoubleNode<>(x, front, front.next);
front.next.prev = newNode;
front.next = newNode;
return newNode;
}
// 尾插法插入元素
public DoubleNode<T> insert(T x) {
return insert(Integer.MAX_VALUE, x);
}
// 返回指定位置的结点,如果i越界则返回null
private DoubleNode<T> getNode(int i) {
if (i >= 0 && !isEmpty()) {
DoubleNode<T> p = head.next;
for (int j = 0; p != head && j < i; j++)
p = p.next;
if (p != head)
return p;
}
return null;
}
// 判断链表是否为空
public boolean isEmpty() {
return head.next == head;
}
// 返回循环双链表的字符串表示
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("CirDoublyList: [");
if (!isEmpty()) {
DoubleNode<T> p = head.next;
while (p != head) {
sb.append(p.data.toString()).append(", ");
p = p.next;
}
sb.setLength(sb.length() - 2); // 去掉最后一个逗号和空格
}
sb.append("]");
return sb.toString();
}
// 验证代码
public static void main(String[] args) {
CirDoublyList<Integer> list = new CirDoublyList<>();
System.out.println("是否为空:" + list.isEmpty());
list.insert(0, 1);
list.insert(2);
System.out.println(list.toString()); // 输出:CirDoublyList: [1, 2]
DoubleNode<Integer> node = list.insert(1, 3);
System.out.println(list.toString()); // 输出:CirDoublyList: [1, 3, 2]
System.out.println("新插入的结点值:" + node.data); // 输出:新插入的结点值:3
System.out.println("是否为空:" + list.isEmpty()); // 输出:是否为空:false
}
}
希望这个示例能对您有所帮助。请注意,DoubleNode 类没有包含在上述代码中,你需要自行创建它来实现双向链表的节点。
内容由零声教学AI助手提供,问题来源于学员提问




