为了账号安全,请及时绑定邮箱和手机立即绑定

请问一下在java中LinkedList问题。具体情况如下~

请问一下在java中LinkedList问题。具体情况如下~

狐的传说 2022-01-20 17:15:39
它的这段源代码看不懂:public void addFirst(E e) {addBefore(e,header.next);}private Entry<E> addBefore(E e,Entry<E> entry) {Entry<E> newEntry = new Entry<E>(e,entry,entry.previous); newEntry.previous.next = newEntry;newEntry.next.previous = newEntry;size++;modCount++;return newEntry;}private static class Entry<E>{//就不复制出来了}addfirst e作为元素 header.next应该作为地址吧?它的addBefore方法读不明白!
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

Entry<E> newEntry = new Entry<E>(e,entry,entry.previous);
这句话new一个Entry,
Entry类本身的构造方法有3个参数:(E e,Entry next,Entry previous)
对应于传进来的3个实参 (e,entry,entry.previous)
而传进来的entry本身是指向header.next的引用,header应该是LinkedList的
头结点,本身无数据,它指向的next才是LinkedList链表的第一个数据结点
接着newEntry.previous就是指向header,然后.next=newEntry就是将header的next引用指向newEntry,
同理,newEntry.next即为传进来的entry,即最开始的header.next,然后.previous=newEntry将enrty的previous引用指向newEntry
这样,就完成了在header头结点和原来的第一个结点之间插入一个结点的过程,即新插入的结点e就是header指向的第一个结点

查看完整回答
反对 回复 2022-01-23
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

其实只要知道双向链表里面每个节点有两个属性,一个(previous)指向前一个节点,而令一个(next)指向下一个节点。addBefore就是将新节点(e)添加到原来的节点的前面一个节点,而由于是添加first,所以想当于修改了原来的头节点。

查看完整回答
反对 回复 2022-01-23
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号