簡體   English   中英

在鏈接列表的開頭插入Node

[英]Inserting Node at the beginning of a linked list

我必須在鏈接列表的開頭插入一個新的節點。 切換數據包后,我嘗試用新數據覆蓋第一個節點的數據。 但是,如果這樣做,我的程序將更改第一個和第二個Node的數據值。

void insert(String iv_name, String iv_name_first, String iv_title, int iv_earning) {
    if (this.first == null) {
        this.first = new Node(new Data(iv_name, iv_name_first, iv_title, iv_earning, 0));
    } else {
        Node n = this.first;
        Data last_n_data = getLast().data;
        Data[] datas = new Data[getLast().data.getId()];
        int j = 0;
        while (n.next != null) {
            datas[j] = n.data;
            j++;
            n = n.next;
        }
        j = 0;
        n = this.first;
        while (n.next != null) {
            n.next.data = datas[j];
            n.next.data.setId(datas[j].getId() + 1);
            j++;
            n = n.next;
        }
        n.next = new Node(new Data(last_n_data.getName_last(), last_n_data.getName_first(), last_n_data.getTitle(),
                last_n_data.getEarning(), last_n_data.getId() + 1));
        n.next.next = null;

        this.first.data.setName_last(iv_name);
        this.first.data.setName_first(iv_name_first);
        this.first.data.setTitle(iv_title);
        this.first.data.setEarning(iv_earning);
        this.first.data.setId(0);
    }
}

我認為您正在使這不必要地變得復雜。 要將鏈接列表插入到開頭,您需要做的是:

void insert(String iv_name, String iv_name_first, String iv_title, int iv_earning) {
    Node toCreate = new Node(new Data(iv_name, iv_name_first, iv_title, iv_earning, 0));
    toCreate.next = this.first;
    this.first = toCreate;
}

此代碼僅創建一個新節點,使其成為新的第一個節點,並使其指向所有已經存在的節點。 因此,如果您有節點B-> C-> D,則最終結果將是A-> B-> C-> D

暫無
暫無

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

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