Java:从头开始将单链表转换为双链表

时间:2016-12-07 05:56:27

标签: java list

这是课堂作业;我目前有一个单链表,需要将其转换为双链表。目前,该列表是历史战争的集合。

需要更改此程序中的哪些内容才能将其转换为双链表?我觉得我很亲密,但坚持某个部分(需要在“添加”部分更改)

public static MyHistoryList HistoryList;

public static void main(String[] args) {

    //Proof of concept
    HistoryList = new MyHistoryList();


    HistoryList.add("Battle of Vienna");
    HistoryList.add("Spanish Armada");
    HistoryList.add("Poltava");  
    HistoryList.add("Hastings");
    HistoryList.add("Waterloo");

    System.out.println("List to begin with: " + HistoryList);


    HistoryList.insert("Siege of Constantinople", 0);
    HistoryList.insert("Manzikert", 1);


    System.out.println("List following the insertion of new elements: " + HistoryList);


    HistoryList.remove(1);
    HistoryList.remove(2);
    HistoryList.remove(3);

    System.out.println("List after deleting three things " + HistoryList);

}

}

class MyHistoryList {

//setting up a few variables that will be needed
private static int counter;
private Node head;

这是节点的私有类,包括一些getter和setter。我已经设置了'previous',根据我已经用Google搜索的内容,它应该用于实现双向链表,但我不确定如何以我的单身方式向前推进列表已设置。

    private class Node {

    Node next;
    Node previous;
    Object data;


    public Node(Object dataValue) {
        next = null;
        previous = null;
        data = dataValue;
    }


    public Node(Object dataValue, Node nextValue, Node previousValue) {
        previous = previousValue;
        next = nextValue;
        data = dataValue;
    }



    public Object getData() {
        return data;
    }

    public void setData(Object dataValue) {
        data = dataValue;
    }

    public Node getprevious() {
        return previous;
    }

    public void setprevious(Node previousValue) {
        previous = previousValue;   
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node nextValue) {
        next = nextValue;
    }

}

这会将元素添加到列表中。我想我需要更改这部分才能使其成为一个双向链表,但是不太明白如何?

public MyHistoryList() {

}

// puts element at end of list
public void add(Object data) {

    // just getting the node ready
    if (head == null) {
        head = new Node(data);
    }

    Node Temp = new Node(data);
    Node Current = head;


    if (Current != null) {


        while (Current.getNext() != null) {
            Current = Current.getNext();
        }


        Current.setNext(Temp);
    }

    // keeping track of number of elements
    incrementCounter();
}

private static int getCounter() {
    return counter;
}

private static void incrementCounter() {
    counter++;
}

private void decrementCounter() {
    counter--;
}

这只是tostring,插入,删除和其他一些事情。我不相信这里需要改变什么来使它成为双重链表?

public void insert(Object data, int index) {
    Node Temp = new Node(data);
    Node Current = head;


    if (Current != null) {

        for (int i = 0; i < index && Current.getNext() != null; i++) {
            Current = Current.getNext();
        }
    }


    Temp.setNext(Current.getNext());


    Current.setNext(Temp);


    incrementCounter();
}

//sees the number of elements
public Object get(int index)

{

    if (index < 0)
        return null;
    Node Current = null;
    if (head != null) {
        Current = head.getNext();
        for (int i = 0; i < index; i++) {
            if (Current.getNext() == null)
                return null;

            Current = Current.getNext();
        }
        return Current.getData();
    }
    return Current;

}

// removal
public boolean remove(int index) {


    if (index < 1 || index > size())
        return false;

    Node Current = head;
    if (head != null) {
        for (int i = 0; i < index; i++) {
            if (Current.getNext() == null)
                return false;

            Current = Current.getNext();
        }
        Current.setNext(Current.getNext().getNext());


        decrementCounter();
        return true;

    }
    return false;
}

public int size() {
    return getCounter();
}


public String toString() {
    String output = "";

    if (head != null) {
        Node Current = head.getNext();
        while (Current != null) {
            output += "[" + Current.getData().toString() + "]";
            Current = Current.getNext();
        }

    }
    return output;
}

}

0 个答案:

没有答案