簡體   English   中英

將元素添加到單鏈列表

[英]adding elements to a singly linked list

我正在為整數的單鏈列表編寫一種方法,該方法將在輸入整數時對它們進行排序。 由於我的列表全部為空,或者其中包含隨機條目,因此出現了某些錯誤。

public void add(int newEntry){
    Node ptr = start;
    Node insert = null;

    Node newNode = new Node(newEntry, null);

    if (start == null)
        start = newNode;

    while (ptr != null && newEntry >= ptr.data){
        ptr = ptr.next;
    }

    if (ptr == start)
        start = newNode;
    else 
        insert = newNode;
}
if (start == null)
    start = newNode;

您可能要在此之后return ,因為添加完newNode

if (ptr == start)
    start = newNode;

這將導致start的舊值丟失。 大概您想連接newNodestart

else 
    insert = newNode;

這不會做任何事情,因為在其他任何地方都沒有使用insert

您沒有考慮所有必需的邊緣情況。 為了使此方法有效,請嘗試以下操作:

public void add(int newEntry){

    Node newNode = new Node(newEntry, null);

    if (start == null) {
        start = newNode;
    }

    else if (newEntry <= start.data) {
        newNode.next = start;
        start = newNode;
    }

    else {
        Node ptr = start;
        Node prv = null; // save a reference to previous node
        while (ptr != null && newEntry > ptr.data) {
            prv = ptr;
            ptr = ptr.next;
        }
        prv.next = newNode;
        newNode.next = ptr;
    }

}

我試圖盡量減少更改:

public void add(int newEntry){
    Node ptr = start;
    Node insert = null;

    // the former if is not necessary, will be handled by if at the end

    while (ptr != null && newEntry >= ptr.data){
        insert = ptr; // the node which will point to the new entry
        ptr = ptr.next;
    }

    Node newNode = new Node(newEntry, ptr); // don't forget the rest of the list!

    if (insert == null)
        start = newNode; // first node of empty list or ordered first
    else
        insert.next = newNode; // insertion point found to insert node after
}

暫無
暫無

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

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