为了账号安全,请及时绑定邮箱和手机立即绑定

我需要一些关于排序节点的解释

我需要一些关于排序节点的解释

ibeautiful 2023-08-04 15:43:00
我很困惑这个比较是如何工作的,例如第二个 if 语句,如果比较 > 0 它应该在 currentItem 之前,但是 if 语句内的行让我太困惑了,你能给我解释一下它们是如何工作的吗?顺便一提this.root是 ListItem 的一个实例,代码不使用 LinkedList 或 ArrayList 类,下面的代码尝试模拟 LinkedList 中的某些内容,我认为,如果我的问题需要更多解释,请告诉我。此致每次我运行我的应用程序时,它都会在标题中显示此错误,并且我已经搜索了一些问题,有人说将 ViewModel 构造函数公开,而我的是公开的,其他人则说:从 HomeViewModel 中删除 Context 上下文和 LifecycleOwnerlifecycleOwner 构造函数参数,或者创建一个可以构建 HomeViewModel 实例的 ViewModelProvider.Factory ,并将该工厂与 ViewModelProviders.of() 一起使用我已经提出了两种解决方案,但仍然遇到相同的错误主要活动package com.example.architectureexample;import androidx.appcompat.app.AppCompatActivity;import androidx.lifecycle.Observer;import androidx.lifecycle.ViewModelProvider;import androidx.lifecycle.ViewModelProviders;import android.os.Bundle;import android.widget.Toast;import java.util.List;public class MainActivity extends AppCompatActivity {//    5th video    private NoteViewModel noteViewModel;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);        noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {            @Override            public void onChanged(List<Note> notes) {//                update recycleView                Toast.makeText(MainActivity.this, "onChanged", Toast.LENGTH_SHORT).show();            }        });    }}
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

我添加了评论,以及一些修复:


public boolean addItem(ListItem newItem) {

    if(this.root == null){

        this.root = newItem;

        return true;

    }

    ListItem currentItem = this.root;

    while (currentItem != null){

        int comparison = currentItem.compareTo(newItem);

        if (comparison < 0){                               // if cur < new

            newItem.setPrevious(currentItem.previous());   //   advance cur

            if (currentItem.next()!=null){

                currentItem = currentItem.next();

            } else {                                       //   if end list

                currentItem.setNext(newItem);              //     append new

                newItem.setPrevious(currentItem);

                return true;

            }

        } else if (comparison > 0){

            // new < cur, insert before, fixes made to this part

            newItem.setNext(currentItem);                  // set   new.nxt

            newItem.setPrevious(currentItem.previous());   // set   new.prv

            if (newItem.previous()!= null){                // if    new.prv != 0

                newItem.previous().setNext(newItem);       //   set new.prv.nxt

            else                                           // else

                this.root = newItem;                       //   set root

            currentItem.setPrevious(newItem);              // set   cur.prv

            return true;

        }

        return false;     // return false if duplicate

    }

}

使用文本图形。假设新节点 N 将插入到 A 之后和 B 之前。初始状态,cur (currentItem) = B:


                                  cur         == B

    A <------ B    0 <- N         cur.prv     == A  new.prv = 0

    A ------> B         N -> 0    cur.prv.nxt == B  new.nxt = 0

顺序是:


         N -> B                   new.nxt      = cur

    A <- N                        new.prv      = cur.prv

    A -> N                        new.prv.nxt  = new

         N <- B                   cur.prv      = new

导致


    A -> N -> B

    A <- N <- B


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信