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

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

问题描述

我仍在学习 Java,目前正在解决 Cracking the Coding Interview 中的问题,第 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中删除重复项的函数/方法,但是当我尝试对其进行测试时,我尝试在main函数中创建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

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天全站免登陆