dummyHead | 有了虚拟头结点,所有的位置都有前驱。 |
怎么头插? | 当前链表有节点时:让当前的对象指向要插入数的结点,然后dummyHead指向当前对象就行了。 node.next=dummyHead.next; dummyHead.next=node; 当前链表没结点时: node.next=dummyHead.next; dummyHead.next=node; 为什么一样的代码。 |
为什么一样的代码? | 因为虚拟头结点的存在大家都有前驱,因为当前链表没节点时:node.next=null,dummyHead.next=null 都是null。 |
有虚拟头结点后,所有结点都是该结点的“后继”,结点,无论当前是否存在有效元素,插入步骤一致,省去了判断头。 |
/**
* 头插
*/
public class LinkedListWithHead {
private int size;
private Node dummyHead=new Node();
public void addFirst(int val){
Node node=new Node();
node.val=val;
node.next=dummyHead.next;
dummyHead.next=node;
// Node node=new Node(val,dummyHead.next);
// dummyHead.next=node;
// dummyHead.next=new Node(val,dummyHead.next);
size++;
}
关于任意位置的插入代码: 找前驱走index步
在索引为Index 的位置插入新节点valueadd(2,20)在索引为2的地方插入200 prev指针是从dummyHead开始走 走index步走到待插入位置的前驱结点 package seqlist; /** * 初始化定义dummyHead */ public class LinkedListWithHead { private int size; private Node dummyHead=new Node(); public class Node { int val; Node next; // public Node(int val, Node next) { // // } }
//-------------插入部分---------------> /** * 头插 */ public void addFirst(int val){ Node node