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,它可以做你想做的事,而无需重新发明***。 llistjava.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 &lt;T&gt; void sort(List&lt;T&gt; list, Comparator&lt;? super T&gt; c) 方法,但您为我节省了大量时间。谢谢! 你实际上可以通过排序来做到这一点,但你真的不想这样做。它会更慢,更复杂。尝试一下,只是为了好玩,你会明白为什么。并在Collections.sort上学习;真正有用的时候还会有很多其他的时候。

以上是关于JAVA:对链表中相邻的重复值进行排序的主要内容,如果未能解决你的问题,请参考以下文章

279,对链表进行插入排序

147. 对链表进行插入排序

LeetCode--147.对链表进行插入排序

LeetCode Java刷题笔记—83. 删除排序链表中的重复元素

对链表进行插入排序

c语言对链表的数据排序的问题,分不是问题!