我是Java初学者,目前正在完成有关DSA的Udemy课程。我正在学习链表,并且正在研究在链表中插入和删除节点的方法。
从我所学到的到目前为止,我知道我们使用条件head==null
来检查链接列表是否是空的。
如果条件head==null
为true,则LinkedList为空,否则它不为空。
然而,我们不应该检查是否尾巴==null
,因为尾巴将始终引用LinkedList中的最后一个节点,即使我们使head==null
?
这是我的密码:
public class SinglyLinkedList{
public Node head;
public Node tail;
public int size;
//Create Linkedlist
public Node createLL(int num){
Node node=new Node();
node.value=num;
node.next=null;
head=node;
tail=node;
size=1;
return head;
}
//Insert Node
public void insertNode(int num,int location){
Node node=new Node();
node.value=num;
if(head==null){//Used to check if linked list is empty or not?
createLL(num);
return;
}
else if(location==0){
node.next=head;
head=node;
}
else if(location>=size){
node.next=null;
tail.next=node;
tail=node;
}
else{
Node tempNode=head;
int index=0;
while(index<location-1){
tempNode=tempNode.next;
index++;
}
node.next=tempNode.next;
tempNode.next=node;
}
size++;
}
//Delete Node
public void deleteNode(int location){
if(head==null){//Used to check if linked list is empty or not?
System.out.println("The linked list is not present");
return;
}
else if(location==0){
head=head.next;
size--;
if(size==0){
tail=null;
}
}
else if(location>=size){
Node tempNode=head;
for(int i=0;i<size-1;i++){
tempNode=tempNode.next;
}
if(head==null){
tail=null;
size--;
return;
}
tempNode.next=null;
tail=tempNode;
size--;
}
else{
Node tempNode=head;
int index=0;
while(index<location-1){
tempNode=tempNode.next;
index++;
}
tempNode.next=tempNode.next.next;
size--;
}
}
}
链接列表中的节点作为值和内存地址(下一个节点)对存在,正如您在上面的程序中实现的那样。对于最后一个节点,列表的末尾表示为NULL。
我们检查head是否为NULL,因为如果链接列表中下一个节点的内存地址为NULL,则表示已到达列表的末尾。链接列表的尾部将始终为空,因为它将表示列表的结尾,并且不会有下一个要指向的节点。
空列表:
head -> null
tail -> null
单节点列表:
head -> node1
node1.next -> null
tail -> node1
多节点列表:
head -> node1
node1.next -> node2
node2.next -> null
tail -> node2
其中<代码>-
我正在学习Java数据结构课程,目前正在学习单链表。在addHead的方法中,为什么我们需要检查tail==null?如果是真的,为什么尾巴=头? 完整代码:https://venus.cs.qc.cuny.edu/~ryba/cs313/linkedList/LinkedList.java
问题内容: 在检查null时,我使用以下方法: 但我也看到了这一点: 使用一个相对于另一个有什么优势吗?还是只是为了提高可读性? 问题答案: 第二个版本()称为 yoda条件 。 它们都导致相同的行为,但是第二个优点是:当您忘记一个变量时,它可以防止您意外地更改变量。在这种情况下,编译器将在该行返回错误,并且您不会再遇到一些奇怪的代码行为和调试结果。
为什么当我们试图创建一个单链表时,我们在类中使头为NULL,而不是使下一个头为NULL。在与链表相关的函数中,为什么要将下一个节点设为Null而不设为Null?
让我澄清一下我的问题,OnCreate方法用于初始化视图并展平布局,因此我认为,如果OnCreate方法在一切之前运行,意味着我的EditText字段为空意味着为空,那么这个条件是如何工作的。但它运行良好,这意味着我理解错误。请告诉我我错过了什么。 代码片段取自google codelabs,我们在那里提供电话号码。在editText中,通过点击设备内置键盘上的发送按钮,我们启动电话应用程序来拨打
问题内容: 我应该使用哪种构造来检查Twig模板中的值是否为NULL? 问题答案: 根据您的实际需求: 检查值是否为: {% endif %} 检查是否定义了变量: {% endif %} 另外,对两个值进行类型严格比较的测试可能对检查(如)以外的值很有用:
问题内容: 我知道Google搜索可以找到合适的答案,但是我更喜欢听您的个人(也许是技术性的)意见。 Java和C#之间在引发异常方面有所不同的主要原因是什么? 在Java中,引发异常的方法的签名必须使用“ throws”关键字,而在C#中,您不知道在编译时是否可以引发异常。 问题答案: 因为对已检查异常的响应几乎总是: 如果您确实知道如果抛出特定异常,您可以执行某些操作,那么您可以捕获该异常,然