在Java中为单链接列表创建新节点 [英] Create new Node for Singly Linked List in Java

查看:64
本文介绍了在Java中为单链接列表创建新节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我仍在学习Java,目前正在通过破解编码面试"来解决问题,第2章(LinkedList)中的问题之一要求从未排序的链表中删除重复项.我在GitHub上找到了很多答案/解决方案,但我想创建自己的Node并编写自己的版本.

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. I found a bunch of answers/solution on GitHub, but I would like to create my own Node, and write my own version.

到目前为止,我实现的是创建Node类并编写可以从未排序的LinkedList中删除重复项的函数/方法,但是当我尝试对其进行测试时,我尝试在主函数中创建LinkedList,但是我仍然不知道如何解决.有人可以帮助/指导我如何创建单链接列表吗?基本上,我创建了四个节点(第四,第三,第二,头部),并使用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. 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.

预先感谢

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;
        }
    }
}

推荐答案

尝试另一种循环,例如 while

Try another kind of loop e.g. while

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

就像它解释的那样,它不知道如何遍历您的节点.使用 foreach 的另一种方法是创建一个自己的类,该类实现接口 Iterable 并包含您的 LinkedList 逻辑.

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.

对于第二种方法,我建议您阅读以下内容:如何我实现了Iterable接口?

For the second approach I would suggest you to read the following: How can I implement the Iterable interface?

这篇关于在Java中为单链接列表创建新节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆