4.3 为链表设置虚拟头结点dummyhead

 

链表设置虚拟头结点dummyhead,这样对链表来说,第一个元素就是dummyhead的next所对应的节点元素,而不是dummyhead所对应的节点元素。

dummyhead位置所对应的元素是根本不存在的,这只是未来我们编写逻辑方便而出现的一个虚拟头结点。

dummyhead就是索引为0的这个位置的元素的前一个节点。当我们有了dummyhead后,为链表添加一个元素,就不需要对头结点进行特殊处理了,只需要找到等待添加位置的前一个位置的节点,

此时对于链表来说,所有位置都有前一个节点。

代码

之前的成员变量元素、初始化构造函数

 

 修改后的

1     private Node dummyHead;
2     private int size;
3 
4     public LinkedList(){
5         dummyHead = new Node();   //表明,对于一个空的链表来说,是存在一个节点的,这个唯一的节点就是虚拟头结点
6         size = 0;
7     }

 

 

修改前的add函数

修改后

复制代码
 1  public void add(int index, E e){
 2 
 3         if(index < 0 || index > size)
 4             throw new IllegalArgumentException("Add failed. Illegal index.");
 5 
 6         Node prev = dummyHead;//dummyHead是0这个位置的元素前一个位置的节点
 7         for(int i = 0 ; i < index ; i ++)
 8             prev = prev.next;
 9 
10         prev.next = new Node(e, prev.next);
11         size ++;
12     }
复制代码

 

posted @   靖愁  阅读(1456)  评论(2编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示