【问题标题】:Implement a linked list with 3 string values实现具有 3 个字符串值的链表
【发布时间】:2012-10-12 12:51:54
【问题描述】:

我正在尝试实现一个单链表以在每个元素(First、Middle、Last Name)中保存多个字符串值,以便我可以在元素中排序和搜索不同的字符串(按姓氏排序,搜索中间名等)。

我创建了一个 Name 类来保存 3 个字符串(first、middle、last)和每个字符串的观察者方法。

有人可以帮我修改 MergeSort 以按姓氏排序 (Name.getLastName()) 吗?如果我能弄清楚这一点,它应该让我走上正确的轨道来创建我的按中间名搜索方法。

提前致谢!

public class SinglyLinkedList {

  private class Link {

    public Name data;
    public Link next;

    Link(Name data) 
    {
        this(data, null);
    }

    Link(Name d, Link n) 
    {
        data = d;
        next = n;
    }

  }

  private Link first_;

  // Creates an empty list
  public void List() 
  {
      first_ = null;
  }

// Returns true iff this list has no items
  public boolean isEmpty() 
  {
      return first_ == null;
  }

// Data is put at the front of the list

  public void insertFront(Name data) 
  {
      first_ = new Link(data, first_);
  }

// Removes first element
  public String removeFront() 
  {     
        Name data = first_.data;
        first_ = first_.next;
        return data;

  }

  public Link MergeSort(Link headOriginal)
  {

    if (headOriginal == null || headOriginal.next == null)
    {
        return headOriginal;
    }

    Link a = headOriginal;
    Link b = headOriginal.next;

    while ((b != null) && (b.next != null))
    {
        headOriginal = headOriginal.next;
        b = (b.next).next;
    }

    b = headOriginal.next;

    headOriginal.next = null;

    return merge(MergeSort(a), MergeSort(b));

  }

  public Link merge(Link a, Link b)
  {
      Link temp = new Link();
      Link head = temp;
      Link c = head;

      while ((a != null) && (b != null))
      {

          if (a.item <= b.item)
          {
              c.next = a;
              c = a;
              a = a.next;
            }
            else
            {
                c.next = b;
                c = b;
                b = b.next;
            }
        }

        c.next = (a == null) ? b : a;

        return head.next;
    }
} 

【问题讨论】:

    标签: java mergesort singly-linked-list


    【解决方案1】:

    我正在尝试实现一个单链表以在每个元素中保存多个字符串值(名字、中间名、姓氏)

    不要。您已经描述了一种逻辑类型 - 例如PersonalName - 三个字符串成员。所以将该类型创建为单独的类型。然后你可以使用任何普通的内置集合,例如Deque&lt;PersonalName&gt;List&lt;PersonalName&gt;。 (有什么特别的原因需要链表吗?)

    任何时候你发现自己有一个值的集合,总是相同的长度,每个值总是具有相同的明确定义的含义,强烈考虑创建一个类型来封装它。

    【讨论】:

    • 我在发布问题大约 2 分钟后得出了这个结论。我将创建一个单独的对象来保存数据。我仍然需要弄清楚如何按对象的一部分进行排序。我需要创建一个单链表,因为这是一个分配问题。
    • @domincvautour:好的,听起来您现在只是有一个关于排序链表的问题,对吧? “三串”部分排序?听起来您可能会坚持的唯一一点是if (a.item &lt;= b.item) - 应该使用适当的比较。 (如果你让 PersonalName 实现 Comparable` 你可以调用 a.item.compareTo(b.item)...)
    猜你喜欢
    • 2016-04-29
    • 2015-01-09
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多