java中循环双向链表的插入方法
Insertion method in circular doubly linked list in java
我是 java 的初学者。我正在尝试编写一个程序,在给定位置插入一个节点并显示整个链表。但是,我的节点似乎没有被插入,当我显示链接列表时,只显示第一个节点值。有人可以解释我哪里出错了吗?
//这里location为索引位置。索引从0开始,到size-1结束,就像一个数组。
//插入代码
public void insertIntoCircularDoublyLinkedList(int location,int num){
Node node=new Node();
Node tempNode=head;
int index=0;
while(index<location){
tempNode=tempNode.next;
index++;
}
node.prev=tempNode.prev;
node.next=tempNode;
tempNode.prev.next=node;
tempNode.prev=node;
}
size++;
}
//遍历代码
void traverseCDLL() {
if (head != null) {
Node tempNode = head;
for (int i=0; i < size; i++) {
System.out.print(tempNode.value);
if (i != size - 1) {
System.out.print(" -> ");
}
tempNode = tempNode.next;
}
} else {
System.out.println("The CDLL does not exist.");
}
System.out.println();
}
//主要方法
public static void main(String[] args) {
CircularDoublyLinkedList CDLL=new CircularDoublyLinkedList();
CDLL.createCircularDoublyLinkedList(8);
CDLL.insertIntoCircularDoublyLinkedList(1, 1);
CDLL.insertIntoCircularDoublyLinkedList(2, 2);
CDLL.insertIntoCircularDoublyLinkedList(3, 3);
CDLL.insertIntoCircularDoublyLinkedList(4, 4);
CDLL.traverseCDLL();
}
输出:
8 -> 0 -> 0 -> 0 -> 0
您忘记在 insertIntoCircularDoublyLinkedList
中设置 node.value = num
。
您应该为您的节点分配一个值。如果你把Node
class设计得好,它的构造函数可以把这个值作为参数。
其他一些问题:
当给定位置为0时,新节点应该成为链表的头部,否则你的新节点将被视为last节点列表。
当列表为空时,应避免错误,只需创建引用自身的头节点和return
我不会在方法名称中使用术语“CircularLinkedList”,因为您的 class 已经使用了该名称,并且很清楚该方法处理的内容。
所以:
public void insert(int location, int num) {
Node node = new Node(num); // <-- pass num to the constructor
if (head == null) { // Boundary case
head = node;
head.next = head.prev = head;
return;
}
Node tempNode = head;
int index = 0;
while (index < location) {
tempNode = tempNode.next;
index++;
}
node.prev = tempNode.prev;
node.next = tempNode;
tempNode.prev.next = node;
tempNode.prev = node;
if (location == 0) { // Make new node the head
head = node;
}
size++;
}
我是 java 的初学者。我正在尝试编写一个程序,在给定位置插入一个节点并显示整个链表。但是,我的节点似乎没有被插入,当我显示链接列表时,只显示第一个节点值。有人可以解释我哪里出错了吗?
//这里location为索引位置。索引从0开始,到size-1结束,就像一个数组。
//插入代码
public void insertIntoCircularDoublyLinkedList(int location,int num){
Node node=new Node();
Node tempNode=head;
int index=0;
while(index<location){
tempNode=tempNode.next;
index++;
}
node.prev=tempNode.prev;
node.next=tempNode;
tempNode.prev.next=node;
tempNode.prev=node;
}
size++;
}
//遍历代码
void traverseCDLL() {
if (head != null) {
Node tempNode = head;
for (int i=0; i < size; i++) {
System.out.print(tempNode.value);
if (i != size - 1) {
System.out.print(" -> ");
}
tempNode = tempNode.next;
}
} else {
System.out.println("The CDLL does not exist.");
}
System.out.println();
}
//主要方法
public static void main(String[] args) {
CircularDoublyLinkedList CDLL=new CircularDoublyLinkedList();
CDLL.createCircularDoublyLinkedList(8);
CDLL.insertIntoCircularDoublyLinkedList(1, 1);
CDLL.insertIntoCircularDoublyLinkedList(2, 2);
CDLL.insertIntoCircularDoublyLinkedList(3, 3);
CDLL.insertIntoCircularDoublyLinkedList(4, 4);
CDLL.traverseCDLL();
}
输出:
8 -> 0 -> 0 -> 0 -> 0
您忘记在 insertIntoCircularDoublyLinkedList
中设置 node.value = num
。
您应该为您的节点分配一个值。如果你把Node
class设计得好,它的构造函数可以把这个值作为参数。
其他一些问题:
当给定位置为0时,新节点应该成为链表的头部,否则你的新节点将被视为last节点列表。
当列表为空时,应避免错误,只需创建引用自身的头节点和return
我不会在方法名称中使用术语“CircularLinkedList”,因为您的 class 已经使用了该名称,并且很清楚该方法处理的内容。
所以:
public void insert(int location, int num) {
Node node = new Node(num); // <-- pass num to the constructor
if (head == null) { // Boundary case
head = node;
head.next = head.prev = head;
return;
}
Node tempNode = head;
int index = 0;
while (index < location) {
tempNode = tempNode.next;
index++;
}
node.prev = tempNode.prev;
node.next = tempNode;
tempNode.prev.next = node;
tempNode.prev = node;
if (location == 0) { // Make new node the head
head = node;
}
size++;
}