簡體   English   中英

如何有效地在一個列表中對兩個雙鏈表求和?

[英]How to sum two double linked lists in one list efficiently?

例如 listA = [3,6,7,4] 和 listB = [2,3,1] 並且 output 必須是 listC=[5,9,8,6]。 到目前為止,這是我所擁有的,但效率不高。

`public void sum(doublelist aList) {`
for (int i = 0; i < size(); i++) {
     set(i, this.get(i) + other.get(i % other.size()));
}
}

正如您所說,您正在使用鏈表,您可以從一個元素導航到另一個元素:

public void sum(DoubleList aList){
    DoubleNode cur=this.head;
    DoubleNode other=aList.head;
    while(cur!=null){
        cur.setValue(cur.getValue()+other.getValue());
        other=other.getNext();
        if(other==null){
            other=aList.head;
        }
        cur=cur.getNext();
    }
}

此代碼假定您的DoubleList包含類型為DoubleNode的名為head的頭節點屬性,並且DoubleNode具有用於訪問值的方法double getValue() / void setValue(double value)和用於檢索下一個元素的DoubleNode getNext()方法。

這應該更有效,因為您不必每次都查詢列表( O(n)而不是O(n^2) )。

答案完全取決於您使用的是哪種列表。

但無論如何,您可以獲得的最佳復雜度是 O(n),您將必須對列表的每個元素至少迭代一次。

最簡單的是使用 ListIterator,它允許在遍歷列表時設置一個值。

    void sum(List<Integer> l1, List<Integer> l2) {
        final ListIterator<Integer> it1 = l1.listIterator();
        final Iterator<Integer> it2 = l2.iterator();
        
        while (it1.hasNext() && it2.hasNext()) {
            it1.set(it1.next() + it2.next());
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM