当你收到一个号码时,你需要翻看列表,找到这个号码是否在列表中重复。如有重复,请将号码从列表中删除,并在列表前面加上新号码。如果没有重复,请在列表前加上编号。
这是正确的输出:程序的输出
这是我的LinkedList类
T`public class LinkedList
{
Node first;
private boolean flag = true;
public void add(int item)
{
Node oldFirst = first;
first = new Node();
first.item = item;
first.next = oldFirst;
removeDuplicate(item);
}
public void show()
{
for (Node curr = first; curr != null; curr = curr.next)
{
System.out.print(curr.item + " ");
}
System.out.println("");
}
public int listSize()
{
int count = 0;
for (Node curr = first; curr != null; curr = curr.next)
{
count++;
}
return count;
}
public void removeDuplicate(int item)
{
Node prev = first;
for (Node current = prev.next; current != null && flag; current =
current.next)
{
if(current.item == item)
{
flag = false;
prev.next = current.next;
}
prev = prev.next;
}
}
private class Node
{
int item;
Node next;
}
}
这是我的客户
public class ListNoDuplation
{
public static void main(String[] args)
{
LinkedList a = new LinkedList();
// Insert: 12
a.add(12);
a.show();
// Insert: 13
a.add(13);
a.show();
// Insert: 14
a.add(14);
a.show();
// Insert: 12
a.add(12);
a.show();
// Insert: 10
a.add(10);
a.show();
// Insert: 14
a.add(14);
a.show();
// Insert: 12
a.add(12);
a.show();
// Insert: 15
a.add(15);
a.show();
// Insert: 12
a.add(12);
a.show();
// Insert: 13
a.add(13);
a.show();
System.out.println("List size is: " + a.listSize());
}
}
那么这是输出:
12
13 12
14 13 12
12 14 13
10 12 14 13
14 10 12 14 13
12 14 10 12 14 13
15 12 14 10 12 14 13
12 15 12 14 10 12 14 13
13 12 15 12 14 10 12 14 13
列表大小为:9
我不明白它为什么停了。
谢谢
重写RemoveDuplicate
方法。您当前的方法实现不正确、不清晰。
提示:
>
您不需要标志值。
在检查过程中,设置curr=first.next,一如既往地先添加一个新项,然后删除重复项。因此,第一项检查是不必要的。
在if语句中检查如果你再次找到项目,它会找到一个然后删除和中断循环。因为不可能存在一个以上价值。
public void removeDuplicate(int item) {
Node curr = first.next;
Node prev = first;
while( curr != null) {
if(curr.item == item ) {
prev.next = curr.next;
break;
}
prev = curr;
curr = curr.next;
}
}
如果删除某个元素,则将flag=false
设置为true
,但不再将其设置为true
。这意味着,在LinkedList的生命周期中移除第一个元素后,该标志仍然设置为false
。
for (Node current = prev.next; current != null; current = current.next)
{
if(current.item == item)
{
prev.next = current.next;
break; // the `break` keyword provides a much cleaner way to exit your for-loop.
}
prev = prev.next;
}
侧记:一个名为flag的标志是一个很糟糕的练习,因为你从来没有看到过那个标志发出的信号。如果它只在一个方法/循环中使用,那么就不要在类级别上定义它,而是在所述方法或循环的级别上定义它。
侧记2:在当前的实现中,以及使用break
时,您将无法从列表中删除多个重复项。
我还有一个快速的SQL问题。考虑下表: 你看,这是一个特殊的情况。有些情况下,Value2和Value3都在一个条目中设置,有些情况下,Value2和Value3都设置了,有些情况下,它们都没有设置(没有重复项)。 所以问题是:如何删除重复项(通过Value1)并获得信息最多的条目?即,如果设置了Value2和/或Value3,则设置了这些条目。显然,我不能只使用“not null”,因为有些情况
问题内容: 我想从排序的链表{0 1 2 2 3 3 4 5}中删除重复项。 ` ` prev.setNext(tempHeader)在while循环内无法正常工作。理想情况下,当prev = 2且tempHeader = 3时,prev.next应该是data = 3的节点。 Printlist函数仅使用标题指针并打印列表。 节点定义如下。 问题答案: 循环已排序,因此您知道重复项将彼此相邻。如
我对Mongo的Webservice调用返回以下JSON。我需要迭代这个JSON值并删除Item-product_语言,因为它包含NULL/空字符串。 你对怎么做有什么想法吗? Python 3.4版本。 { }
本文向大家介绍python无序链表删除重复项的方法,包括了python无序链表删除重复项的方法的使用技巧和注意事项,需要的朋友参考一下 题目描述: 给定一个没有排序的链表,去掉重复项,并保留原顺序 如: 1->3->1->5->5->7,去掉重复项后变为:1->3->5->7 方法: 顺序删除 递归删除 1.顺序删除 由于这种方法采用双重循环对链表进行遍历,因此,时间复杂度为O(n**2) 在遍历
结果:[1,2,3,3,3,4,4][1,2,3,3,3,4,4]
问题内容: 我有两个列表需要合并,第二个列表忽略了第一个列表的重复项。..有点难以解释,所以让我展示一个代码看起来像什么,以及我想要什么的示例。 您会注意到结果具有第一个列表, 包括 其两个“ 2”值,但是second_list也具有附加的2和5值这一事实并未添加到第一个列表中。 通常,对于这样的事情,我会使用集合,但是first_list上的集合会清除它已经具有的重复值。所以我只是想知道什么是实