我正在尝试实现单链表以在每个元素(First,Middle,Last Name)中保存多个String值,以便我可以排序并搜索元素中的不同字符串(按姓氏排序,搜索中间名等。)。
我创建了一个Name类,为每个字符串保存3个字符串(first,middle,last)和observer方法。
有人可以帮我修改我的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;
}
}
答案 0 :(得分:5)
我正在尝试实现一个单链表,在每个元素中保存多个String值(First,Middle,Last Name)
别。你已经描述了一种逻辑类型 - 例如一个PersonalName
- 有三个字符串成员。因此,将该类型创建为单独的类型。然后,您可以使用任何常规内置集合,例如Deque<PersonalName>
或List<PersonalName>
。 (您是否需要链接列表?)
每当你发现自己有一组值,总是长度相同,每个值总是具有相同的明确含义时,强烈考虑创建一个类型来封装它。