节点中的多种不同数据类型,用于Java中的自定义链接列表

时间:2016-11-07 06:08:55

标签: java linked-list

我正在尝试构建链表,每个节点都有一个整数,即节点的位置,以及一个节点名称的字符串。

public class Node {

    public int position;
    public Node next;
    public String shipname;

    public Node(int num, String shipname) {
        position = num;
        shipname = shipname;
    }

    public void insert(int x, String shipname) {
        Node newNode = new Node(num, shipname);
        Node previous = null;
        Node current = first;

        while (current != null && num < current.position) {
            previous = current;
            current = current.next;
        }

        if (previous == null) {
            newNode.next = first;
            first = newNode;
        } else {
            previous.next = newNode;
            newNode.next = current;
        }
    }

    public void display() {
        Node current = first;

        while (current != null) {
            System.out.println(current.shipname + " " + current.position);
            current = current.next;
        }

        System.out.println(" ");
    }

}

有什么理由,为什么这段代码正确地给出位置数据,但是“null”而不是将船名写入屏幕?这是一个简单的输出:

Largest priority to Smallest
null 7
null 4
null 3

4 个答案:

答案 0 :(得分:1)

看来您想要这样的代码。

public class LinkedListA<T> {
	static class Node<T>{
		T data;
		Node<T> next;
		public Node(T d){
			this.data=d;
			this.next=null;
		}
		
	}
	
	Node<T> head;
	public LinkedListA(){
		head=null;
	}
	public void add(T v) {
		Node<T> new_node=new Node<T>(v);
		if(this.head==null) {
			this.head=new_node;
		}else {
			Node<T> current_node=this.head;
			while(current_node.next!=null) {
				current_node=current_node.next;
			}
			current_node.next=new_node;
		}
		
	}
	public void addLast(T v) {
		add(v);
	}
	public void print() {
		Node<T> current_node=this.head;
		while(current_node!=null) {
			
			System.out.println(current_node.data);
			current_node=current_node.next;
		}
	}

	public static void main(String[] args) {
		LinkedListA<Integer> list=new LinkedListA<Integer>();
		list.add(10);
		list.add(20);
		list.add(30);
		list.addLast(40);
		System.out.println("===LIST=====");
		list.print();

	}

}

答案 1 :(得分:0)

您的代码有一些错误。例如,Node是节点而不是列表。列表由多个节点组成。所以外部类应该是一个列表,它应该包含节点......

以下是我的单链表的代码:

logger.disabled = 0

请注意,我在列表类中声明并使用节点。

答案 2 :(得分:0)

使用&#34; this.shipname&#34;编辑构造函数和&#34; this.position&#34;解决了我的问题。谢谢大家的帮助

{{1}}

答案 3 :(得分:0)

首先,您在构造函数中引用相同的局部变量。

public Node(int num, String shipname) {
    position = num;
    shipname = shipname;
}

将此更改为assign,

this.shipname = shipname;

所以最终的代码变成了:

public Node(int num, String shipname) {
    position = num;
    this.shipname = shipname;
}

似乎还有另一个问题,你没有声明变量'first'。 在'insert'方法中将变量'x'更改为'num'。

而Java提供了LinkedList类,你可以看一下。我用Java的LinkedList更新了你的代码。希望它有所帮助。

public class NodeLinkedList {
    private class Node {
        int position;
        String shipName;

        Node(int position, String shipName) {
             this.position = position;
             this.shipName = shipName;
        }
    }

    private LinkedList<Node> nodeList;

    NodeLinkedList() {
        nodeList = new LinkedList<>();
    }

    void insert(int position, String name) {
         nodeList.add(new Node(position, name));
    }

    void display(){
        for (Node node : nodeList) {
            System.out.println(node.shipName + " " + node.position);
        }
    }
}