循环链表节点插入Java
Circular Linked List Node Insertion Java
我尝试为循环 linked 列表实现插入方法。我想我取得了一些成功。
问题:
当我显示列表时。显示方法将循环,因为 link 的每个下一个变量都被 linked 到一个非空节点对象。所以 head 永远不会是空对象。根据我对单个 linked 列表的记忆,head 始终指向列表中的第一个节点或其中包含数据的第一个节点。
我对循环 linked 列表的概念理解:
据我所知,循环 linked 有点像一个单独的 linked 列表,但略有不同:尾对象的下一个变量指向头部。
我正在按照来源 link 提供的图表进行编码。
来源:http://sourcecodemania.com/circular-linked-lists/
public void insert(String data)
{
Link link = new Link(data);
if(head == null)
{
head = link;
tail= link;
}
else
{
tail.next = link;
tail = link;
tail.next = head;
}
}
public void display()
{
// good implementation for display #2
while(head != null)
{
// System.out.println (head.data);
head = head.next;
}
}
一旦您至少插入一个元素,您将永远不会遇到 null。它将一直持续到无穷大。
此外,为了显示列表而修改 head 可能不是一个好主意。显示之类的操作应该不会有任何副作用。
相反,在您的列表中保留成员字段大小 class 并在每个插入和删除方法中更新它。
现在你就知道应该循环多少次了。
ListClassName current = head; // Head is not modified.
for (int i = 0; i < this.size; i++) {
// System.out.println (current.data);
current = current.next;
}
祝你好运。
您可以保留对第一个 Link 对象的引用,并在循环时检查以确保 head 不等于该对象:
public void display()
{
boolean first=true;
Link firstItem=null;
// good implementation for display #2
while(head != null && head!= firstItem)
{
if(first){
firstItem=head;
first=false;
}
// System.out.println (head.data);
head = head.next;
}
}
我尝试为循环 linked 列表实现插入方法。我想我取得了一些成功。
问题: 当我显示列表时。显示方法将循环,因为 link 的每个下一个变量都被 linked 到一个非空节点对象。所以 head 永远不会是空对象。根据我对单个 linked 列表的记忆,head 始终指向列表中的第一个节点或其中包含数据的第一个节点。
我对循环 linked 列表的概念理解: 据我所知,循环 linked 有点像一个单独的 linked 列表,但略有不同:尾对象的下一个变量指向头部。
我正在按照来源 link 提供的图表进行编码。
来源:http://sourcecodemania.com/circular-linked-lists/
public void insert(String data)
{
Link link = new Link(data);
if(head == null)
{
head = link;
tail= link;
}
else
{
tail.next = link;
tail = link;
tail.next = head;
}
}
public void display()
{
// good implementation for display #2
while(head != null)
{
// System.out.println (head.data);
head = head.next;
}
}
一旦您至少插入一个元素,您将永远不会遇到 null。它将一直持续到无穷大。
此外,为了显示列表而修改 head 可能不是一个好主意。显示之类的操作应该不会有任何副作用。
相反,在您的列表中保留成员字段大小 class 并在每个插入和删除方法中更新它。
现在你就知道应该循环多少次了。
ListClassName current = head; // Head is not modified.
for (int i = 0; i < this.size; i++) {
// System.out.println (current.data);
current = current.next;
}
祝你好运。
您可以保留对第一个 Link 对象的引用,并在循环时检查以确保 head 不等于该对象:
public void display()
{
boolean first=true;
Link firstItem=null;
// good implementation for display #2
while(head != null && head!= firstItem)
{
if(first){
firstItem=head;
first=false;
}
// System.out.println (head.data);
head = head.next;
}
}