在java中的单链表中追加唯一值

时间:2012-12-01 22:23:23

标签: java linked-list

我想要附加到链表中而不重复值。这是我的功能:但这不会过滤掉重复的内容。知道我哪里错了吗? Node包含一个字符串值和一个下一个指针。

public static void append( Node head, Node newNode ) {  
   Node currentNode = head;  
   while( currentNode.next != null ) { 
      if(currentNode.value.trim().equals(newNode.value.trim())) {
         return;
      }
      currentNode = currentNode.next;
   }  
   currentNode.next = newNode; 
}

2 个答案:

答案 0 :(得分:3)

你没有检查最后一个节点是否有重复(正如jtahlborn在他的回答中所说,当我开始编写这个时,它被删除了......)。您需要继续前进,直到currentNode为空,但需要记住上一个节点,以便您可以将其用作尾节点。

这是一个简短但完整的程序,显示它正常工作。它有令人讨厌的包访问字段等,但它的工作原理......

class Test {
    public static void main(String[] args) {
        Node head = new Node("head");
        append(head, new Node("foo"));
        append(head, new Node("bar"));
        append(head, new Node("bar"));
        append(head, new Node("bar"));
        append(head, new Node("baz"));
        dump(head);
    }        

    public static void append(Node head, Node newNode) {
        Node currentNode = head;
        Node previousNode = null;

        while (currentNode != null) {
            previousNode = currentNode;
            if (currentNode.value.trim().equals(newNode.value.trim())) {
                return;
            }
            currentNode = currentNode.next;
        } 

        previousNode.next = newNode;        
    }

    public static void dump(Node head) {
        Node currentNode = head;

        while (currentNode != null) {
            System.out.println(currentNode.value);
            currentNode = currentNode.next;
        } 
    }
}

class Node {
    String value;
    Node next;

    Node(String value) {
        this.value = value;
    }
}

答案 1 :(得分:1)

您永远不会检查最后一个节点是否有重复。

将来发现此类问题的最佳方法是在调试器中逐步执行代码,而不是在论坛上提问。否则,你永远不会学会自己编码。