📅  最后修改于: 2023-12-03 14:58:20.668000             🧑  作者: Mango
问题 13 是2019年计算机科学专业研究生入学考试(GATE)的其中一个问题。这个问题涉及到了程序设计和数据结构。下面是该问题的介绍和解答。
问题 13 要求我们创建一个程序来实现一个双向链表的具体操作。具体要求如下:
实现一个双向链表,链表节点的定义如下:
class Node {
int data;
Node prev;
Node next;
}
链表需要支持以下操作:
getNodeAtIndex(int index)
:返回链表第index个位置的节点。insertNodeAtIndex(Node node, int index)
:在第index个位置插入一个新的节点。deleteNodeAtIndex(int index)
:删除链表中第index个位置的节点。需要注意的是,链表中的第一个节点的index是0,第二个节点的index是1,以此类推。
class DoublyLinkedList {
Node head;
// 返回链表第index个位置的节点
Node getNodeAtIndex(int index) {
Node current = head;
int counter = 0;
while (current != null && counter != index) {
current = current.next;
counter++;
}
return current;
}
// 在第index个位置插入一个新的节点
void insertNodeAtIndex(Node node, int index) {
if (index == 0) {
node.next = head;
if (head != null) {
head.prev = node;
}
head = node;
return;
}
Node previous = getNodeAtIndex(index - 1);
if (previous == null) {
System.out.println("Invalid index");
return;
}
node.next = previous.next;
if (previous.next != null) {
previous.next.prev = node;
}
previous.next = node;
node.prev = previous;
}
// 删除链表中第index个位置的节点
void deleteNodeAtIndex(int index) {
Node nodeToDelete = getNodeAtIndex(index);
if (nodeToDelete == null) {
System.out.println("Invalid index");
return;
}
if (nodeToDelete.prev != null) {
nodeToDelete.prev.next = nodeToDelete.next;
} else {
head = nodeToDelete.next;
}
if (nodeToDelete.next != null) {
nodeToDelete.next.prev = nodeToDelete.prev;
}
}
}
此处介绍了一个双向链表的实现,其中包含了三个基本操作:获取指定位置的节点、在指定位置插入节点和删除指定位置的节点。
请注意,以上代码仅仅提供了问题 13 的一个解答示例,你可以根据实际需求进行修改或扩展。