Java 如何从链表中删除重复的节点?

Java 如何从链表中删除重复的节点?,java,data-structures,linked-list,Java,Data Structures,Linked List,我已经用java设计了自己的单链表数据结构。现在我要定义一个具有特定行为的函数。我将此函数命名为“PurgeList”。此函数应该删除所有重复的节点(具有相同内容的节点)从链接列表中,至少我希望列表本身只保留一个包含该内容的节点。例如,如果节点中保存的当前内容是顺序的: 1,2,3,4,1,4,5 执行具有上述行为的函数后,列表必须形成: 1,2,3,4,5 示例代码: 1类节点 2类列表 import java.util.Scanner; 公共班级名单{ 整数大小; 节点第一节点; 扫描仪用户

我已经用java设计了自己的单链表数据结构。现在我要定义一个具有特定行为的函数。我将此函数命名为“PurgeList”。此函数应该删除所有重复的节点(具有相同内容的节点)从链接列表中,至少我希望列表本身只保留一个包含该内容的节点。例如,如果节点中保存的当前内容是顺序的:

1,2,3,4,1,4,5

执行具有上述行为的函数后,列表必须形成:

1,2,3,4,5

示例代码:

1类节点

2类列表

import java.util.Scanner;
公共班级名单{
整数大小;
节点第一节点;
扫描仪用户信息=新扫描仪(System.in);
扫描仪用户输入=新扫描仪(System.in);
节点LastNode;
公开名单(){
FirstNode=null;
尺寸=1;
}
公共厕所清洁工(){
节点temp1=第一个节点;
while(temp1!=null){
节点temp2=temp1;
while(temp2.Link!=null)
if(temp1.Element.equals(temp2.Link.Element))
temp2=temp2.Link;
其他的
temp2=temp2.Link;
temp1=temp1.Link;
}
}
公共布尔值为空(){
返回FirstNode==null;
}
公共int SizeOf(){
返回大小;
}
public void InsertArbitrary(){
System.out.print(“放置节点的位置:”);
int Location=UserInput.nextInt();
如果(位置>大小){
System.out.println(“输入无效,请重试”);
返回;
}否则如果(位置<0){
System.out.println(“输入无效,请重试”);
返回;
}else if(位置==1){
系统输出
.printf(“在节点%d:,位置中输入要保存的内容”);
Object元素=UserInfo.nextLine();
FirstNode=新节点(元素,FirstNode);

}否则,如果(位置>0&&Location您在发现重复节点时未删除该节点

而不是

    while (temp2.Link != null)
        if (temp1.Element.equals(temp2.Link.Element))
            temp2 = temp2.Link;
        else
            temp2=temp2.Link;
试一试

您应该尝试使用不同的案例来测试它。我尝试了一些:

public static void main(String[] args) {
    List list = new List();
    for (int i=0; i<5; ++i) {
        list.InsertArbitrary();
    }
    list.ShowOff();
    list.PurgeList();
    System.out.println("------------------");
    list.ShowOff();
}

$ java List
Where To Put Node :  1
Enter something to save in Node 1 : 1
Where To Put Node :  2
Enter something to save in Node 2 : 2
Where To Put Node :  3
Enter something to save in Node 3 : 3
Where To Put Node :  4
Enter something to save in Node 4 : 1
Where To Put Node :  5
Enter something to save in Node 5 : 5
1
2
3
1
5
------------------
1
2
3
5

$ java List
Where To Put Node :  1
Enter something to save in Node 1 : 1
Where To Put Node :  2
Enter something to save in Node 2 : 1
Where To Put Node :  3
Enter something to save in Node 3 : 1
Where To Put Node :  4
Enter something to save in Node 4 : 1
Where To Put Node :  5
Enter something to save in Node 5 : 1
1
1
1
1
1
------------------
1
publicstaticvoidmain(字符串[]args){
列表=新列表();

对于(int i=0;i您需要使用集合来避免重复值。
以下是一个例子

谢谢jas。还有两个问题。为什么人们不投票支持我的问题?我问问题的错误是什么?哦,很难进入StackOverflow用户的头脑。我几乎会说,在没有获得否决票的情况下问问题是一种成就,更不用说获得否决票了。什么绝对是好的关于你的问题是,它的格式很好,你用一个具体的例子清楚地说明了你想要完成什么,并且你给出了复制错误所需的所有代码。唯一的批评可能是它有点“我的代码不工作,这是我的代码,有什么问题?”这是一种问题,而不是其他人可以从中学习的更一般的问题。你是一个令人印象深刻的人。我编辑了我的问题。再次感谢你。你能给我发封电子邮件吗?我真的很想和你保持联系。ekhalaji@gmail.comNote链表本身就是有缺陷的,即使对于有经验的程序员也是如此需要进行完整的测试和调试。
    while (temp2.Link != null)
        if (temp1.Element.equals(temp2.Link.Element))
            temp2 = temp2.Link;
        else
            temp2=temp2.Link;
       while (temp2.Link != null) {
            if (temp1.Element.equals(temp2.Link.Element))
                temp2.Link = temp2.Link.Link;
            else
                temp2=temp2.Link;
        }
public static void main(String[] args) {
    List list = new List();
    for (int i=0; i<5; ++i) {
        list.InsertArbitrary();
    }
    list.ShowOff();
    list.PurgeList();
    System.out.println("------------------");
    list.ShowOff();
}

$ java List
Where To Put Node :  1
Enter something to save in Node 1 : 1
Where To Put Node :  2
Enter something to save in Node 2 : 2
Where To Put Node :  3
Enter something to save in Node 3 : 3
Where To Put Node :  4
Enter something to save in Node 4 : 1
Where To Put Node :  5
Enter something to save in Node 5 : 5
1
2
3
1
5
------------------
1
2
3
5

$ java List
Where To Put Node :  1
Enter something to save in Node 1 : 1
Where To Put Node :  2
Enter something to save in Node 2 : 1
Where To Put Node :  3
Enter something to save in Node 3 : 1
Where To Put Node :  4
Enter something to save in Node 4 : 1
Where To Put Node :  5
Enter something to save in Node 5 : 1
1
1
1
1
1
------------------
1