我们知道,将元素推送到列表的前面需要O(1)时间。现在考虑我们要在列表的末尾放置(或附加)一个元素。此操作的复杂性是什么?
现在考虑,要将元素放在列表的末尾,我们需要遍历列表到末尾(因为没有上一个指针),这需要O(n)的时间复杂度。可以在O(1)中实现吗?
我做了一些实现,在最后附加值的同时,我将指针保留在可以插入节点的位置的下一个位置。请检查以下内容:
import java.util.*;
class List{
int data;
List next;
List(int data){
this.data = data;
}
}
class Driver{
List head, temp;
Driver(){
head = null;
temp = head;
}
void push(int item){
if(head == null){
head = new List(item);
temp = head;
} else {
temp.next = new List(item);
temp = temp.next;
}
}
}
class AppendInList{
public static void main(String [] args){
Driver obj = new Driver();
obj.push(5);
obj.push(66);
}
}
我搜索了SO,但没有得到满意的结果!如果我犯了一些错误,请纠正我!
答案 0 :(得分:3)
如果您在链表数据结构中保存对前/头元素的引用,则可以在O(1)时间内将元素推到链表的前面。
类似地,您可以维护对last
元素的引用,使用该引用可以在O(1)
的最后一次添加元素。每次添加元素时,您都必须更新last
指针。
数据结构如下:
class List{
ListNode head;//ListNode class stores next reference and value of the node
ListNode tail;//last element
void pushToLast(ListNode newElement){
//TODO : Take care of corner cases
tail.next = newElement;
tail = newElement;
}
}