dadi723 2017-04-23 09:06 采纳率: 0%
浏览 541

自制linklist容器,遍历元素时出问题,只能访问第一个元素

代码如下

容器类

 package datastructure;
import java.util.Iterator;
//链表
public class LinkList<T> implements Iterable{
    Node<T> first,last;
    int length;
    Iterator<T> itr=null;
    public LinkList(){
        first=last=null;
        length=0;
    }
    public Iterator<T> iterator() {
        return  new itr();
    }
    //存取第i个节点
    Node<T> getNode(int i){
        if(i<0||i>length-1){
            return null;
        }
        if(i==0){
            return first;
        }
        Node<T> p=first;
        int j=0;
        while(p!=null&&j<i){
            p=p.next;
            j++;
        }
        return p;
    }
    //取得i号节点的值
    public T get(int i){
        Node<T> p=getNode(i);
        if(p==null){
            return null;
        }
        else
            return p.data;
    }
    //修改第i号节点的值
    public boolean set(int i,T x){
        Node<T> p=getNode(i);
        if(p==null){
            return false;
        }
        else{
            p.data=x;
            return true;
        }
    }
    //在i位插入元素
    public void add(int i,T x){
        Node<T> p=null,s=null;
        int j=i-1;
        s=new Node<T>(x,null);
        if(first==null||length==0){
            first=s;
            last=s;
        }
        if(j<0){
            s.next=first;
            first=s;
        }
        if(j>=length-1){
            s.next=last;
            last=s;
        }else{
            p=getNode(j);
            s.next=p.next;
            p.next=s;
        }
        length++;
    }
    class itr implements Iterator<T>{
        private int index=0;
        private Node<T> current=first;
        public boolean hasNext() {
            return (index!=length&&current!=null);
        }
        public T next() {
            T temp=current.data;
            current=current.next;
            index++;
            return temp;
        }
    }
}
//节点
class Node<T> implements Comparable<Node<T>>{
    public T data;
    public Node<T> next;
    public Node(T key){
        data=key;
        next=null;
    }
    public Node(T key,Node<T> next){
        data=key;
        this.next=next;
    }
    public boolean equals(Object e){
        Node<T> node=(Node<T>)e;
        return data.equals(node.data);
    }
    public int compareTo(Node<T> e) {
        Comparable<T> x;
        if(data instanceof Comparable){
            x=(Comparable<T>)data;
            return (int)x.compareTo(e.data);
        }else throw new ClassCastException("类型无法比较!");
    }
    public String toString(){
        return data.toString();
    }
}

测试类

 package datastructure;
import java.util.*;
public class test {
    public static void main(String[] args) {
        LinkList<Integer> list=new LinkList<Integer>();
        list.add(1,1);
        list.add(2,2);
        list.add(3,3);
        Iterator<Integer> i=list.iterator();
        while(i.hasNext()){
            System.out.println(i.next());
        }
    }
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 #MATLAB仿真#车辆换道路径规划
    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘