单链表的头插法,得到的结果与输入顺序相反。
及每次在头结点之前插入新的结点。
/**
* 在头结点前插入一个结点
*/
public void insert(int value){
Node aNode = new Node(value);
if(head == null){
head = aNode;
}else{
aNode.next = head;
head = aNode;
}
}
尾插法得到的结果与输入顺序相同。实现时的不同之处则是需要增加一个“尾指针”来表示单链表的插入位置。代码如下:
/**
* 在头结点后插入结点
* 当单链表为空进行插入时,头尾指针均指向插入的结点
* 当单链表不为空插入时,头指针不变,先定位尾指针,再在尾指针后插入
*/
public void insertBack(int value){
Node aNode = new Node(value);
Node tail = head;
if(head == null){
aNode.next = head;
head = aNode;
}
else{
//寻找尾结点
while(tail.next != null)
tail = tail.next;
//在尾结点插入新结点
tail.next = aNode;
}
}
可以看出,尾插法比头插法的显著的 特点就是在没次进行插入时,需要先遍历单链表以找到链表的尾部。