【问题标题】:Inserting Node at the beginning of a linked list在链表的开头插入节点
【发布时间】:2016-04-17 15:47:24
【问题描述】:

我必须在链表的开头插入一个新节点。切换数据包后,我尝试用新数据覆盖我的第一个节点的数据。但如果我这样做,我的程序会更改我的第一个和第二个节点的数据值。

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);
    }
}

【问题讨论】:

    标签: java linked-list


    【解决方案1】:

    我认为你让这变得不必要地复杂了。要插入到链表的开头,您需要做的就是:

    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

    【讨论】:

    • 我认为最好插入Data:void insert(Data data)。如果您删除 if-else 并保留两行代码,代码也可以正常工作:toCreate.next = this.first;this.first = toCreate;
    • @ĐăngKhoaHuỳnh 从他的代码看来,Node() 构造函数已经处理了在Data 中设置Data 对象@。你对 if 语句是正确的。
    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多