Java链表习题

1.在Java语言中要模拟链表中的节点,该如何声明。
public class Node1 {
int data;
Node1 next;
public Node1(int data) {
this.data=data;
this.next=null;
}
}
2.如果链表中的节点不只记录单一数据,例如每个节点除了有指向下一个节点的指针外,还包括记录每一位学生的姓名、学号、成绩,请问在Java中要模拟链表中的此类节点,该如何声明。
public class Node {
int data;
int np;
String names;
Node next;
public Node(int data,int np,String names) {
this.np=np;
this.data=data;
this.names=names;
this.next=null;
}
}
3.请以Java程序代码来说明如何删除链表内的节点。
public void delete(Node delNode) {
Node newNode;
Node temp;
if(first.datadelNode.data) {
first=first.next;
}else if(last.data
delNode.data) {
System.out.println(“I’m here.”);
newNode=first;
while(newNode.next!=last) newNode=newNode.next;
newNode.next=last.next;
last=newNode;
}else {
newNode=first;
temp=first;
while(newNode.data!=delNode.data) {
temp=newNode;
newNode=newNode.next;
}
temp.next=delNode.next;
}
}
4.请以Java语言实现单向链表插入节点的算法。
public void insert(Node1 ptr) {
Node1 temp;
Node1 newNode;
if(this.isEmpty()) {
first=ptr;
last=ptr;
}else {
if(ptr.nextfirst) {
ptr.next=first;
first=ptr;
}else {
if(ptr.next
null) {
last.next=ptr;
last=ptr;
}else {
temp=first;
newNode=first;
while(ptr.next!=newNode.next) {
temp=newNode;
newNode=newNode.next;
}
temp.next=ptr;
ptr.next=newNode;
}
}
}
}
5.以链接方式表示一串数据有何好处
链表的优点:
(1)可共享某些子表或空间,避免空间浪费
(2)加入或删除点节点十分容易,只需要改变指针
(3)不用事先预留大的连续内存空间,可以动态链接节点
(4)合并或分裂链表,十分简单
6.试说明使用循环链表的优缺点
优点:循环链表在回收到可用内存空间序列及进行多项式相加运算时,较快且有效;
加入或删除节点的运算也优于一般环形链表
缺点:循环链表必须花费额外的空间来存储链接,在读取或查找列表中任一节点的时间与程序都比环形链表逊色;删除节点时,须花费额外的时间,约O(n)找到最后一个节点,才可链接新表的第一个节点
7.在n个数据的链表中查找一个数据,若以平均所需要用的时间来考虑,其时间复杂度为多少?
O(n)
8.用数组法和链表法表示稀疏矩阵有何优缺点,如果用链表表示时,回收到AVL列表(可用内存空间列表),时间复杂度为多少?
数组法:优点:省空间,缺点:非零项改动时要大量移动。
链表法:优点:改动时,不须大量移动,缺点:较浪费空间。
O(m+n+j),m、n为行、列数,j为非零项
9.试比较双向链表与单向链表的优缺点
优点:因为双向链表有两个指针分别指向节点本身的前后两个节点,所以能够很轻松地找到它前后节点,同时从列表中的任一节点也可以找到其他节点而不需要经过反转或比较节点的处理,执行速度较快。另外如果有任一节点的链接断裂,可以轻易地经由反方向遍历列表,快速完整重建链接。
缺点:由于它有两个链接,所以在加入节点或删除节点时都得花更多的时间移动指针,且双向链表较为浪费空间。另外在双向链表与单向链表的算法中,我们知道双向列表在加入一个节点时需改变4个指针,而删除一个节点也需要改变两个指针。不过在单向链表中加入节点,要改变2个指针,而删除一个节点只要改变一个指针即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值