【问题标题】:Java linked list set methodJava链表设置方法
【发布时间】:2013-08-10 13:56:13
【问题描述】:

我必须在不使用 import.java.util.LinkedList 的情况下将我的 ArrayList 代码转换为链接列表。

我之前的代码有4个ArrayList(名称、价格、数量、优先级)

我必须根据 ArrayList 优先级对数组列表进行排序。

所以我确实喜欢这个。

public void sortPriority() {
    for (int i=0; i<name.length(); i++) {
        for (int j=0; j<priority.size()-i-1; j++) {
            if (priority.get(j).compareTo(priority.get(j+1)) > 0) {
                int temp1 = priority.get(j);
                priority.set(j,priority.get(j+1));
                priority.set(j+1, temp1);
                String temp2 = name.get(j);
                name.set(j,name.get(j+1));
                name.set(j+1, temp2);
                double temp3 = price.get(j);
                price.set(j,price.get(j+1));
                price.set(j+1, temp3);
                int temp4 = quantity.get(j);
                quantity.set(j,quantity.get(j+1));
                quantity.set(j+1, temp4);
            }
        }
    }
}

我将我的名字 ArrayList 更改为 Linked List。

由于无法导入 java.util.LinkedList,我将自己的代码放在另一个名为 StringLinkedList 的类中。

abstract class StringLinkedList implements LinkList {

private ListNode head;

public StringLinkedList() {
    head = null;
}
public void showList() {
    ListNode position = head;
    while (position != null) {
        System.out.println(position.getData());
        position = position.getLink();
    }
}
public int length() {
    int count = 0;
    ListNode position = head;
    while (position != null) {
        count++;
        position = position.getLink();
    }
    return count;
}

public void addNodeToStart(String addData) {
    head = new ListNode(addData, head);
}
public void deleteHeadNode() {
    if (head != null) {
        head = head.getLink();
    } else {
        System.out.println("Deleting from an empty list.");
        System.exit(0);
    }
}

public boolean onList(String target) {
    return find(target) != null;
}
private ListNode find(String target) {
    boolean found = false;
    ListNode position = head;
    while ((position != null) && !found) {
        String dataAtPosition = position.getData();
        if (dataAtPosition.equals(target)) {
            found = true;
        } else {
            position = position.getLink();
        }
    }
    return position;
}

public String get(int i) {
    assert (i>=0);
    ListNode current = this.head;
    while (i > 0) {
        i--;
        current = current.link;
        if (current == null) {
            return null;
        }
    }
    return current.data;
}

public String set (int index, String element) {
    ListNode current = this.head;
    ListNode e = current;
    String oldVal = e.element;
    e.element = element;
    return oldVal;
}
}

除了我的 set() 之外,其他所有方法都可以正常工作。

我应该改变什么?

【问题讨论】:

  • “我必须在不使用 import.java.util.LinkedList 的情况下将我的 ArrayList 代码转换为链接列表。”您始终可以使用完全限定名称。
  • @arshajii 这是家庭作业。他不能。
  • @arshajii - 我认为 OP 意味着任务是提出一个独立的链表实现。
  • 我知道,这是个玩笑。
  • 首先,您能否解释一下为什么您无法导入 LinkedList 以及您在使用set() 时遇到了什么错误?您不能导入 LinkedList,但当您创建扩展 LinkedList 的 StringLinkedList 时,您肯定会这样做。

标签: java sorting linked-list


【解决方案1】:

您的set() 方法会忽略传入的index 参数。正如所写,它只是修改列表头部的项目。

您必须像get() 一样实现set() - 找到具有指定索引的项目,然后设置该项目的元素。

【讨论】:

  • 我想通了。感谢您的帮助。
【解决方案2】:

在设置值之前,您需要将current 向前移动index 次。看看你在get 中是怎么做的,并使用类似的逻辑。

【讨论】:

    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2016-10-10
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多