【问题标题】:Iterator Java Linked Lists迭代器 Java 链表
【发布时间】:2017-02-12 15:13:24
【问题描述】:

我在 Java 中创建一个链表,而不是使用 Java API Linked List 类。这是创建一个显示多项式的计算器,旨在将数据存储在链表中。多项式旨在添加到列表的头部,然后按大小顺序显示(但这还不起作用)。我正在努力的部分是 addTerm 方法 - 因为这应该遍历列表添加到列表的头部。我对Java并不陌生,但我只有基本知识。如果有人可以提供帮助,将不胜感激!

import java.util.Iterator;

import javax.xml.soap.Node;

public class PolyData implements Polynomial {

private static class Node{

    Node next;
    public Term term;

}
private static Node head; 

public  Iterator<Term> iterator() {
    // TODO Auto-generated method stub
   return new LinkedList(head);
   }

public static void insertAtHead(Term term) {

    Node newNode = new Node();
    newNode.term = term;
    newNode.next = head;
    head = newNode;
}

public static void insertAfter(Term term, Node insertPoint) {
    Node newNode = new Node();
    newNode.term = term;
    newNode.next = insertPoint.next;
    insertPoint.next = newNode;
}

@Override
public  void addTerm(Term term) {
   Iterator<Term> iter = LinkedList.iterator();
   while (iter.hasNext()) {
       Node newNode = new Node();
       newNode.term = term;
       newNode.next = head;
       head = newNode;
   }
}





public void addPoly(Polynomial poly) {
    //not implemented
}

@Override
public void multiplyByPoly(Polynomial poly) {
    //not implemented
}





public static class LinkedList implements Iterator<Term> {

    private Node current;
    private LinkedList(Node start) {current=start;}

    public static  Iterator<Term> iterator() {
        // TODO Auto-generated method stub
        return new LinkedList(head);
        }



    @Override
    public boolean hasNext() {return (current != null);}

    @Override
    public Term next() {
          Term result = current.term;
          current = current.next;
          return result;
     }
     @Override
     public void remove() {
           throw new UnsupportedOperationException("Not supported");
    }


}

    @Override
    public void clear() {
        // TODO Auto-generated method stub

    }


}

【问题讨论】:

  • public static Iterator iterator() { // TODO 自动生成的方法存根 return new LinkedList(head); } head 的声明在哪里?
  • @efekctive 其私有静态节点头;
  • 它不应该是静态的。否则它将被所有列表共享。其次,您发布的代码应该编译或查看所有部分
  • “我正在苦苦挣扎的部分是 addTerm 方法”——你能详细说明一下吗?
  • 该方法为列表中的每个术语添加一个新术语。所以它最终每次都加 N。我认为

标签: java linked-list


【解决方案1】:
@Override
public  void addTerm(Term term) {
   Iterator<Term> iter = LinkedList.iterator();
   while (iter.hasNext()) {
       Node newNode = new Node();
       newNode.term = term;
       newNode.next = head;
       head = newNode;
   }
}

如果多项式是 x^2 + x + 1,那么在插入所有项后,它将以

x^2 (head) + x (第一次插入列表中有一个元素) + 2 (插入1时列表中有两个元素所以插入两次)

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2021-02-27
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多