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

Posted make-big-money

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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     }

 

以上是关于4.3 为链表设置虚拟头结点dummyhead的主要内容,如果未能解决你的问题,请参考以下文章

力扣专题2.链表

链表----在链表中添加元素详解--使用链表的虚拟头结点

Java 求解移除链表元素

刷题12: 删除链表的倒数第 N 个结点

查找两个单词链表共同后缀的起始结点

LeetCode114 二叉树展开为链表 ---二叉树题 三种解法 (递归) (迭代) (前驱节点)