java,数据结构双向链表问题?

来源:百度知道 编辑:UC知道 时间:2024/07/05 17:33:07
有两个方法:insertLast(long dd)和insertAfert(long key,long dd)。
其中前一个方法insertLast(long dd)不需要指定newLink.next=null,
而insertAfert(long key,long dd)需要指定,为什么?

其实 newLink.next = null 可以不写的 因为 Link newLink = new Link(dd) 这样的newLink.next 就是null

我看了下源代码,在insertAfter中写明是为了和当前插入的元素是在链表的最后一位还是在中间插入,这样是的话newLink.next的值是不同的
if (current == last) // if last link,
{
newLink.next = null; //可以不写的 ,new出来的就是空。目的是与else的区分
else{
newLink.next = current.next;
}

这个我没用过。
但是可以理解下。
insertLast(long dd)。已经是加在最后一个了。它已经是最后了所以后面不需要newLink.next了。
同理insertAfert(long key,long dd) 只是随意加在某个后面而已,所以后面需要一个newLink.next

说清楚点吧。insertAfert(long key,long dd)需要指定newLink.next=null吗?

假如结点Node有两个属性pre,next分别用来指定前一个结点和后一个结点
现在有一个链表LinkedList ll ,里面已经有三个结点A,B,C
如果再向链表ll中插入一个结点,这个结点为D,初始情况下D.pre=null,D.next=null
如果D要插入到链表的末尾,也就是要进行insertLast(D)的操作,那要做的事情就是指定C.next=D,D.pre=C ,这时候D.next=null,默认值,不用管它。
如果D要插入到链表中B的后面,即进行insertAfter(B,D)的操作,那要做的事情是指定D.next =B.next,D.pre=B,B.next=D,D.next.pre=D

所以,你的描述应该是有问题的,希望能帮得到你。