永发信息网

关于java的链表实现问题

答案:2  悬赏:50  手机版
解决时间 2021-02-07 21:22
  • 提问者网友:欲望失宠
  • 2021-02-07 08:53
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?
最佳答案
  • 五星知识达人网友:老鼠爱大米
  • 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);最初的头结点。
如此循环,表中只有两个数据在不停地加到新链表中,分别是两个链表的头。
全部回答
  • 1楼网友:不甚了了
  • 2021-02-07 09:54
楼上发那么多有意思么? 其实这种问题,首先要从宏观上理解道理,代码那都是细节问题,只要宏观上理解了,再写代码就是小case。 迭代,是一种遍历的实现方式, 假设是数组 int a[10] 那么你for(int i=0;i<10;i++) a[i]的方式是可以得到数组所有值的吧。这种是常见的遍历方式 但是链表就不一样了,如果让你用for循环,你觉得i<10, 这个表达式,后面那个10,也就是长度值从哪里来呢? 链表是连起的,像火车一样,你看到的只有火车头,你不晓得后面有几节,也许你会想,我先数下有几节,就行啦?其实也不行,你想一下,链表里的每一个元素,你想得它的值,你必须首先得到前一个的值,推理下去,你必须知道首元素的值。 但数组就不一样了,可以直接用下标,一下精确到位。链表只能从头一个个的数过去。 这就是两种的区别
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯