当前位置: 首页 > 知识库问答 >
问题:

如何使用链表中的对象实现添加和删除方法

郎魁
2023-03-14

链接列表

o void add(Train)-创建一个包含参数对象的新节点,并将该节点添加到列表中,使列表保持升序排序。

o Train delete(int)-在列表中搜索带有参数车次的列车。如果找到它,从列表中删除它,并返回Train对象。如果找不到,则返回NULL。

public void add(Train myTrain) 
{            
        if (myTrain == null) {   
            currentPosition.setNext=new ListNode(myTrain);
        }   
        currentPosition.setNext(new ListNode(myTrain)); 
        currentPosition = currentPosition.getNext();    
        count++;
}

public Train delete(int index)
{                     
        ListNode tmp = head;    
        for (int  i = 0; i < index; i++)        
        {                                
            tmp = tmp.next;     
        }       
        tmp.next = tmp.next.next;             
        count--;
        return tmp.train;
}

我的添加和删除没有正常工作。我不知道如何删除车次。不使用节点的索引不知道怎么做。

共有2个答案

宋丰
2023-03-14

您的delete方法返回了错误的列车。这是一个图像。在for循环之后,它看起来如下所示:

tmp        tmp.next   tmp.next.next
  v          v          v
[train 1]->[train 2]->[train 3]

因此,当您执行tmp.next=tmp.next.next时,将得到以下结果:

tmp        tmp.next
  v          v
[train 1]->[train 3]

           [train 2]

但是在该方法的末尾,您正在执行return tmp.train,并且您可以看到,tmp仍然指向train1,它不是您删除的那个。您将不得不做的是将已删除的节点存储在临时变量中,这样,一旦它从列表中删除,您仍然可以访问它:

public Train delete(int index)
{                     
        ListNode tmp = head;    
        for (int  i = 0; i < index; i++)        
        {                                
            tmp = tmp.next;     
        }
        ListNode deleted = tmp.next;       
        tmp.next = tmp.next.next;             
        count--;
        return deleted.train;
}

当然,您仍然需要添加一些边界检查,以确保index在列表中。

钦英发
2023-03-14

你不是在互相比较火车来保持排序。我会选这样的东西:

public void add(Train myTrain) {
    add(myTrain, head);
}

private void add(Train myTrain, ListNode head) {
    if (head.getNext() == null) {
        // End of list
        head.setNext(new ListNode(myTrain));
        count++;
    } else if (head.getNext().getTrain().getTrainNumber() < myTrain.getTrainNumber()) {
        // We found the spot.
        ListNode newNode = new ListNode(myTrain);
        newNode.setNext(head.getNext());
        head.setNext(newNode);
        count++;
    } else {
        // This was not the spot, try next position.
        add(myTrain, head.getNext());
    }
}


public Train delete(int trainNumber) {
    if (head == null) {
        // There is no list at all.
        return null;
    }
    return delete(trainNumber, head);
}

public Train delete(int trainNumber, ListNode currentNode) {
    if (currentNode.getNext() == null) {
        // No train found.
        return null;
    } else if (currentNode.getNext().getTrain().getTrainNumber() == trainNumber) {
        // The next train should be deleted.
        ListNode tmp = currentNode.getNext();
        currentNode.setNext(currentNode.getNext().getNext());
        return tmp.getTrain();
    } else {
        return delete(trainNumber, currentNode.getNext());
    }
}
 类似资料:
  • 问题内容: 我的代码有一个问题,我做了一个示例程序来显示链接列表中的emp详细信息,现在当我尝试删除特定条目时出现问题意味着它无法正常工作,希望我在代码中犯了一些错误你能建议怎么做吗? 问题答案: 您无法在列表(添加,删除…项目)上进行迭代操作。您必须使用迭代器 参见http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

  • 本文向大家介绍Vue实现动态添加或者删除对象和对象数组的操作方法,包括了Vue实现动态添加或者删除对象和对象数组的操作方法的使用技巧和注意事项,需要的朋友参考一下 添加核心代码如下: 删除核心代码如下: 全部代码如下:  效果图如下: 总结 以上所述是小编给大家介绍的Vue实现动态添加或者删除对象和对象数组的操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非

  • 我没有成功地从链表中删除特定项,方法是-public void removeFromList(string itemtoremove,LinkedList list)。 如何编写从链表中删除特定项的方法? 我的代码是:

  • 我如何删除Linkedlist中的对象。我有一个类帐户,里面有学生ID和学生名称。我输入列表中的对象,但是当我试图删除时,我不知道如何做。因为每次你从列表中间删除一个元素,它就会变得有组织,这意味着索引会改变。所以我如何获得学生ID属性并删除LinkedList中的对象。 样本: 我想让用户插入他想要删除的studentId,我可以做一个搜索和删除该对象的代码。 每次我从中间删除一个对象,它就会改

  • 本文向大家介绍React实现评论的添加和删除,包括了React实现评论的添加和删除的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了React实现评论添加和删除的具体代码,供大家参考,具体内容如下 一、效果图 二、需求描述 1. 手动输入用户名和评论内容,点击提交;输入内容被追加到右侧评论列表; 2.  点击评论列表的“删除”按钮,弹框提示确定删除用户“xx”; 3. 点击“确定”,“

  • 一个课程只有一个主题(CoursetType)和一个数字(courseNumType)。 我已经在下面粘贴了两个类的完整代码,但我认为问题是我的action listener创建了一个新对象,然后调用了一个dropClass()方法(实际上是一个list.remove())。但我不确定如何在不创建新对象的情况下传递正确的值。 这是我创建GUI和实现动作侦听器的主要方法和类: 课程类别: