JAVA:对链表中相邻的重复值进行排序
Posted
技术标签:
【中文标题】JAVA:对链表中相邻的重复值进行排序【英文标题】:JAVA: Sorting duplicate values next to each other in a linked list 【发布时间】:2020-11-29 14:02:20 【问题描述】:所以我正在尝试制作一种将重复值彼此相邻放置的方法。我所做的方法可以做到这一点,但问题是它将列表从低到高排序。这是我的功能
private static void addValue(int val) if (llist.size() == 0) llist.add(val); else if (llist.get(0) > val) llist.add(0, val); else if (llist.get(llist.size() - 1) < val) llist.add(llist.size(), val); else int i = 0; while (llist.get(i) < val) i++; llist.add(i, val);
我当前的输出如下所示: 用户输入:5
链表:[5,]
用户输入:4
链表:[4,5]
用户输入:3
链表:[3,4,5]
用户输入:5
链表:[3,4,5,5]
用户输入:3
链表:[3,3,4,5,5]
我想要的输出应该是:
用户输入:5
链表:[5,]
用户输入:4
链表:[5,4]
用户输入:3
链表:[5,4,3]
用户输入:5
链表:[5,5,4,3]
用户输入:3
链表:[5,5,4,3,3]
【问题讨论】:
建议你看看sort,它可以做你想做的事,而无需重新发明***。llist
是 java.util.LinkedList
吗?
@KevinAnderson 是的
【参考方案1】:
这样的事情应该可以解决问题:
private static void addValue(int val)
int idx = llist.indexOf(val);
if (idx == -1)
llist.add(val);
else
llist.add(idx, val);
基本上,llist.indexOf(val)
给出llist
中与val
匹配的第一项的索引,如果没有匹配项,则为-1。所以如果已经有匹配项,我们在那个位置插入val
;否则,我们将其添加到末尾。
【讨论】:
解决了!谢谢你。我已经在尝试了解public static <T> void sort(List<T> list, Comparator<? super T> c)
方法,但您为我节省了大量时间。谢谢!
你实际上可以通过排序来做到这一点,但你真的不想这样做。它会更慢,更复杂。尝试一下,只是为了好玩,你会明白为什么。并在Collections.sort
上学习;真正有用的时候还会有很多其他的时候。以上是关于JAVA:对链表中相邻的重复值进行排序的主要内容,如果未能解决你的问题,请参考以下文章