代码之家  ›  专栏  ›  技术社区  ›  Alex Chan

按第一个字母对字符串的链接列表排序

  •  0
  • Alex Chan  · 技术社区  · 7 年前

    我在排序字符串的链表时遇到了问题,这些字符串都是以a,B,C开头的。因此,它只是一个链表,其中所有以a开头的字符串都位于以B开头的所有字符串之前,所有这些字符串都位于所有以C开头的字符串之前。该列表不需要再排序了,它不需要保留以相同字母开头的字符串的相对顺序。它也需要在O(N)时间内。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Mureinik    7 年前

    该解决方案需要对列表进行三次O(N)遍历,因此仍然是O(N)。问题是它创建了一个新的列表,并且要求似乎意味着就地排序。

    就地方法可以是遍历列表,将以A开头的任何项目移到开头,将以C开头的所有项目移到末尾。例如。:

    for item in list:
        if item.data[0] == 'A'
            item.remove()
            list.prepend(item.data)
        elif item.data[0] == 'C'
            item.remove()
            list.append(item.data)
    

    1. item 在此伪代码段中,是列表的节点对象- item.data 是其中包含的数据。
    2. prepend append 方法。然而,如果不这样做,实施它们应该不会太困难。
        2
  •  0
  •   Mischa    7 年前

    你很接近。从3个空列表开始,通过原始列表一次将字符串分发到其中。保留一个指向“a”和“B”列表的最后一个元素(插入的第一个元素)的指针,这样将列表连接在一起就不需要重新转换以找到它们的端点。