建立虚拟头结点 dummyHead
这样任意一个节点都存在头结点
package seqlist;
public class SingleLinkedListWithHead {
//虚拟头节点
private Node dummyHead = new Node(-1);
//单链表中具体节点个数(不包含虚拟头节点)
private int size;
/**
* 在任意位置插入一个元素
* @param index
* @param data
*/
public void addIndex(int index,int data){
if(index < 0 || index > size){
System.out.println("add index illegal!");
return;
}
Node prev = dummyHead;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
Node node = new Node(data);
node.next = prev.next;
prev.next = node;
size ++;
}
public void addFirst(int data){
addIndex(0,data);
}
public void addLast(int data){
addIndex(size,data);
}
/**
* 删除任意位置的节点
* @param index
* @return 删除前的节点
*/
public int removeIndex(int index){
if (index < 0 || index >= size){
System.err.println("remove index illegal!");
return -1;
}
Node prev = dummyHead;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
Node node = prev.next;
prev.next = node.next;
node.next = null;
size --;
return node.data;
}
public int removeFirst(){
return removeIndex(0);
}
public int removeLast(){
return removeIndex(size - 1);
}
@Override
public String toString() {
String ret = "";
Node node = dummyHead.next;
while (node != null){
ret += node.data + "->";
node = node.next;
}
ret += "NULL";
return ret;
}
public static void main(String[] args) {
SingleLinkedListWithHead withHead = new SingleLinkedListWithHead();
withHead.addFirst(1);
withHead.addLast(2);
withHead.addLast(3);
withHead.addIndex(1,10);
//1-10-2-3
System.out.println(withHead);
System.out.println(withHead.removeFirst());
System.out.println(withHead.removeLast());
System.out.println(withHead);
}
}