目的:向一个链表的尾部增加节点。
不带尾节点版本:
实现的思路:新建一个新的节点指向头节点的位置,然后遍历寻找到链表的尾节点,循环条件是节点的next不等于null。循环结束后让原来的尾节点的next由null变为指向新的节点node。
public void addTail(T value) {//时间复杂度为O(n)
Node<T> node =new Node<>(value);
if(head==null){//链表为空
head=node;//如果只有一个元素,或者很多的元素,进入到else
}else {
//找尾节点
Node<T> p=head;
for(;p.next!=null;p=p.next){
};
// p 标记位置 尾巴
p.next = node;
}
}
时间复杂度为O(n):因为遍历次数为n
带尾节点版本:
实现的思路:新建一个新的节点,让尾节点的next直接指向新节点,然后再更新尾节点的位置
public void addTail(T value) {//时间复杂度为O(1)
Node<T> node =new Node<>(value);
if(head==null && tail==null){//链表为空
head=node;
tail=node;//
}else {
tail.next=node;
tail=node;//
}
}
时间复杂度为O(1):因为直接在为节点后面增加