您的位置:首页 > 其它

删除无序链表中值重复出现的节点

2017-11-06 11:26 393 查看


import java.util.HashSet;
//删除无序链表中值重复出现的节点
public class DelSameList{

//节点的定义
public static class Node{
int value;
Node next;

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

}

//(一、哈希表法 时间复杂度O(n),空间复杂度O(n))删除无序链表中值重复出现的节点
public static void delSameList(Node head)
{
if(head==null)
{
return ;
}
HashSet<Integer> set=new HashSet<Integer>(); //存储不相同节点的值
Node p=head;
Node cur=head.next;
set.add(head.value); //首先加入头节点
while(cur!=null)
{
if(set.contains(cur.value))
{
p.next=cur.next; //删除cur这个节点
}else{
set.add(cur.value);
p=cur;
}
cur=cur.next;
}
}

//(一、选择排序法 时间复杂度O(n*n),空间复杂度O(1))删除无序链表中值重复出现的节点
public static void delSameList2(Node head)
{
if(head==null)
{
return;
}
Node cur=head;
Node pre=null;
Node next=null;

while(cur!=null)
{
pre=cur;
next=cur.next;
while(next!=null)
{
if(cur.value==next.value)
{
pre.next=next.next; //删除next节点
}
else
{
pre=next; //pre向下移动一个节点
}
next=next.next;
}
cur=cur.next;
}

}
//打印链表
public static void PrintList(Node head)
{
while(head!=null)
{
System.out.print(head.value+" ");
head=head.next;
}
System.out.println();
}
public static void main(String[]args)
{
Node node=new Node(1);
node.next=new Node(2);
node.next.next=new Node(3);
node.next.next.next=new Node(3);
node.next.next.next.next=new Node(4);
node.next.next.next.next.next=new Node(4);
node.next.next.next.next.next.next=new Node(2);
node.next.next.next.next.next.next.next=new Node(1);
node.next.next.next.next.next.next.next.next=new Node(1);
PrintList(node);
delSameList2(node); //删除重复的节点
PrintList(node);

}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息