确定在列表末尾附加值的复杂性

时间:2019-02-26 08:36:33

标签: java linked-list append time-complexity

我们知道,将元素推送到列表的前面需要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,但没有得到满意的结果!如果我犯了一些错误,请纠正我!

1 个答案:

答案 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;
    }
}