java数据结构和算法
发布网友
发布时间:2022-04-21 01:01
我来回答
共4个回答
热心网友
时间:2022-06-16 23:48
首先看存储方式, 这个list, 只保存一个link的引用, 作为链表的头, 然后通过这个头.next, 得到第二个, 第二个.next得到第三个, 一次类推, 知道.next == null 的时候, 说明list结束.
那么现在分两种情况看:
1. 当当前链表里面没有元素的时候, 那么就添加一个, 然后让它的next = first, 也就是为null, 那么链表在遍历的时候, 访问了第一个, 然后第一个.next == null, 链表就到头了.
2.当当前链表里面有元素的时候, 那么因为方法叫做firstinsert, 也就是添加头元素, 所以先声明一个link = newlink, 然后让newlink, 的next 指向之前list.first素, 那么现在newlink就变成了第一个, 而之前那个变成了第二个, 然后再把newlink的引用赋给first, 这样, 链表的头就变成了newlink, 达到了first insert的目的.
first的引用就是我上面分析的两种情况, 一种是没有元素就是null, 另一种情况是有, 变成了第二个, 因为这个list要有结束的位置, 否则就无限长了, 结束的条件就是遍历list的时候, 最后一个元素.next == null, 这样list就停住了我大体画个图吧, 你看看:
第一种情况: 当队列中没有元素的时候
列表中什么都没有 : [ (head)null ]
有一个newlink {nl}
执行完newlink.next=first; {nl} -> null
执行完first=newlink; [ (head){nl} -> null ];
这样list的头就是newlist, 只有它一个元素.
第二中情况: 当队列中有元素的时候:
假设当前头元素为{oldhead}
[ (head){oldhead} -> {obj1} -> {obj2} ... {objn} -> null]
有一个newlink {nl}
执行完newlink.next=first; {nl} -> {oldhead}
执行完first=newlink; [ (head){nl} -> {oldhead} -> {obj1} -> {obj2} ... {objn} -> null]
这样list的头就是newlist, 而oldhead就变成了第二个元素, 后面的元素以此类推.
热心网友
时间:2022-06-16 23:48
原来是链表..
热心网友
时间:2022-06-16 23:48
这个方法是第一次插入列表时用的,这时候next还没有,所以要做的事情是把此link放入first,把null放入next。
就这个情况来看,first初始时null。newlink.next=first;和newlink.next=null;是一个意思,都是把next设为null;
first=newlink;是把列表第一个设为此link
热心网友
时间:2022-06-16 23:49
这是将first给予newlink.next,再将其复制。
就类似于String temp = 0;
temp = A;
A = B;
B = temp;
你可以说temp是0吗?其实不是这样的,只是这是一种赋值的方式。