链表头尾指针
判断:在表头和表尾都可能有元素被插入的情况下,在单循环链表中设置尾指针比设置头指针好。 ( )
正确。原因如下:
-
在设置尾指针时,对于链表的头插和尾插操作都可以在O(1)时间复杂度内完成。
-
/*插头头结点*/ new_node->next = tail->next; tail->next = new_node;
-
/*插入尾结点*/ new_node->next = tail->next; tail->next = new_node; tail = new_node
-
-
如果设置头指针,虽然在头部插入元素的操作可以在 O(1) 时间复杂度内完成,但在尾部插入元素就需要从头开始遍历整个链表,直到找到尾部的元素,这样的时间复杂度是 O(n),n 是链表的长度。
单项链表
多选:有一个单向链表,头指针和尾指针分别为p,q,以下哪项操作的复杂度不受队列长度的影响?
A. 删除头部元素
B. 删除尾部元素
C. 头部元素之前插入一个元素
D. 尾部元素之后插入一个元素
正解(ACD)。原因如下:
因为是单项链表,在删除尾部元素时,需要找到尾部元素的前一个元素,与队列长度有关。
字符串
判断下面代码的输出情况()
String s1=new String("nowcoder");
String s2=new String("nowcoder");
System.out.println(s1==s2);
System.out.println(s1=="nowcoder");
A false false
B true true
C false true
D true false
new关键字将触动Java虚拟机在堆内存分配一个String数据类型的存储空间。根据题意,String类型变量s1和s2各自引用一个对象,虽然对象状态都为"nowcoder",但本身字符内容存储在不同的地址空间。而Java中的"==
"判断的是对象引用是否相同,即内存地址是否相同。因此对于本题中s1==
s2的判断结果为false。"nowcoder"是一个字面量,被存储在与s1引用地址不同的内存空间中,因此s1==
nowcoder的判断结果为false。综上,本题结果为false false。