public void isnert(int data){ //插入方法
if(tail == current ) tail = current.next;
if(head == current) head.next = current;
node temp = new node(data);
temp.next = current.next;
current.next = temp;
cnt++;
}
public void print(){ //打印方法
while(head.next != tail)
{
System.out.println(head.next.value);
current = current.next;
}
}
为什么我插入3.6后,执行print,一直不停输出6?
关于java的链表实现问题
答案:2 悬赏:50 手机版
解决时间 2021-02-07 21:22
- 提问者网友:欲望失宠
- 2021-02-07 08:53
最佳答案
- 五星知识达人网友:老鼠爱大米
- 2021-02-07 09:09
while (p != null) {
q = p;
p = p.next;
q.next = rev.header;
rev.header = q;
}
解释下你为什么错了:
q=p;
q.next=rev.header;
rev.header=q;
p=p.next;
第一步:q=p;这两个同时指向一个Node。
第二步:q.next=rev.header;将当前Node的next指向新链表的头。但是,此时p的next也指向了这个新链表的头。这就导致了没有入口通向我们原来的链表了。
第三步:rev.header=q;调整新链表头的位置为第一个Node。此时,p,q,rev.header同时指向一个Node,就是这个新链表的头。我们现在已经完全和目标链表失去了联系。
第四步:p=p.next;p指向了Link rev = new Link(0);最初的头结点。
如此循环,表中只有两个数据在不停地加到新链表中,分别是两个链表的头。
q = p;
p = p.next;
q.next = rev.header;
rev.header = q;
}
解释下你为什么错了:
q=p;
q.next=rev.header;
rev.header=q;
p=p.next;
第一步:q=p;这两个同时指向一个Node。
第二步:q.next=rev.header;将当前Node的next指向新链表的头。但是,此时p的next也指向了这个新链表的头。这就导致了没有入口通向我们原来的链表了。
第三步:rev.header=q;调整新链表头的位置为第一个Node。此时,p,q,rev.header同时指向一个Node,就是这个新链表的头。我们现在已经完全和目标链表失去了联系。
第四步:p=p.next;p指向了Link rev = new Link(0);最初的头结点。
如此循环,表中只有两个数据在不停地加到新链表中,分别是两个链表的头。
全部回答
- 1楼网友:不甚了了
- 2021-02-07 09:54
楼上发那么多有意思么?
其实这种问题,首先要从宏观上理解道理,代码那都是细节问题,只要宏观上理解了,再写代码就是小case。
迭代,是一种遍历的实现方式,
假设是数组 int a[10]
那么你for(int i=0;i<10;i++) a[i]的方式是可以得到数组所有值的吧。这种是常见的遍历方式
但是链表就不一样了,如果让你用for循环,你觉得i<10, 这个表达式,后面那个10,也就是长度值从哪里来呢?
链表是连起的,像火车一样,你看到的只有火车头,你不晓得后面有几节,也许你会想,我先数下有几节,就行啦?其实也不行,你想一下,链表里的每一个元素,你想得它的值,你必须首先得到前一个的值,推理下去,你必须知道首元素的值。
但数组就不一样了,可以直接用下标,一下精确到位。链表只能从头一个个的数过去。
这就是两种的区别
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯