简体   繁体   English

在Java中为单链接列表创建新节点

[英]Create new Node for Singly Linked List in Java

I am still learning Java, and currently working problems from Cracking the Coding Interview, and one of the problems on Chapter-2 (LinkedList) asks to remove duplicates from an unsorted linked List. 我仍在学习Java,目前正在通过“破解编码面试”来解决问题,第2章(LinkedList)上的问题之一要求从未排序的链表中删除重复项。 I found a bunch of answers/solution on GitHub, but I would like to create my own Node, and write my own version. 我在GitHub上找到了很多答案/解决方案,但我想创建自己的Node并编写自己的版本。

What I have implemented so far is that I created Node class and write the function/method that can remove the duplicates from unsorted LinkedList, but when I try to test it, I tried to create the LinkedList in the main function, but I still have no idea how to figure it out. 到目前为止,我实现的是创建Node类并编写可以从未排序的LinkedList中删除重复项的函数/方法,但是当我尝试对其进行测试时,我尝试在main函数中创建LinkedList,但是我仍然有不知道如何解决。 Can someone please help/guide me how to create a Singly LinkedList? 有人可以帮助/指导我如何创建单链接列表吗? Basically, I create four nodes (fourth,third,second,head), and connect them all using the Node class. 基本上,我创建了四个节点(第四,第三,第二,头部),并使用Node类将它们全部连接起来。

Thanks in advance, 提前致谢,

public class Node {
    int data;
    Node next;

    public Node(int data, Node next){
        this.data = data;
        this.next = next;
    }

    public String toString(){
        return data + "";
    }
}


public class problem1 {

    public void Remove_duplicates(Node head){
        if(head == null){
            return;
        }

        Node current = head;
        while(current != null){
            Node runner = current;
            while(runner.next != null){
                if(runner.next.data == current.data){
                    runner.next = runner.next.next;
                }
                else {
                    runner = runner.next;
                }
            }
            current = current.next;
        }
    }

    public static void main(String[] args) {

        Node fourth = new Node(5,null);
        Node third = new Node(3,fourth);
        Node second = new Node(4,third);
        Node head = new Node(3,second);
        for(Node a: head){
            // ERROR: saying can only iterate over an array (or) java.lang.Iterable
            System.out.println(a.toString());
            a = a.next;
        }
    }
}

Try another kind of loop eg while 尝试另一种循环,例如while

Node head = new Node(3, second);
Node node = head;
while (node.next != null) {
    System.out.println(node.toString());
    node = node.next;
}

Like it explains it does not know how to iterate over your nodes. 就像它解释的那样,它不知道如何遍历您的节点。 Another approach for using the foreach would be to create an own class which implements the interface Iterable and does contain your LinkedList logic. 使用foreach另一种方法是创建一个自己的类,该类实现接口Iterable并包含LinkedList逻辑。

For the second approach I would suggest you to read the following: How can I implement the Iterable interface? 对于第二种方法,建议您阅读以下内容: 如何实现Iterable接口?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM