我正在尝试创建一个自定义链表,到目前为止,我已经想出了如何制作通用结构和两个最简单的方法(insertFirst和deleteFirst)。我要做的下一件事是创建一个获取链接索引的get方法,然后返回该位置的字符串。我没有为每个链接分配任何索引或地址,因此我看不到如何引用链接列表中的特定位置。我看到如果我写first.next我得到第二项,并且first.next.next我得到第三项....但我需要弄清楚如何制作我的索引参数(传递给get方法的那个) )与我列表中的正确位置相关联......我该怎么做?
请原谅任何草率的代码......在掌握了链表结构后,我一定会清理细节。
这是我的代码,感谢先进!
测试代码
class LinkedListTest {
public static void main(String[] args)
{
LinkedList list = new LinkedList();
list.insertFirst("cat");
list.insertFirst("dog");
list.insertFirst("fish");
list.insertFirst("cow");
list.insertFirst("horse");
list.insertFirst("pig");
list.insertFirst("chicken");
System.out.println(list.get(1));
}
}
我的班级
public class LinkedList
{
private Link first;
public LinkedList()
{
first = null;
}
public void insertFirst(String word)
{
Link link = new Link(word);
link.next = first;
first = link;
}
public String deleteFirst()
{
Link temp = first;
first = first.next;
return temp.toString();
}
public String get(int index)
{
// the following is just to show that I can access different links
// by adding more .next's after first--- but i need a way to access
// the correct link based on the index passed in
// String second = first.next.item;
String third = first.next.next.item;
// String fourth= first.next.next.next.item
return third;
}
}
public class Link
{
public String item;
public Link next;
//Link constructor
public Link(String theItem)
{
item = theItem;
}
}
答案 0 :(得分:3)
LinkedList应该有O(n)来查找元素。
所以基本上这意味着你需要继续做element.next直到你到达第n个索引。
答案 1 :(得分:3)
假设get(0)
返回第一个元素:
如果您想将此方法放在public class LinkedList:
public String get(int index)
{
assert( index >= 0 )
Link current = this.first;
while (index > 0) {
index--;
current = current.next;
// Check to see if this is out of bounds of the links
if (current == Null) {
// Since you are returning a String, you can also return
// some kind of a flag to say that the index is out of bounds
return Null;
}
}
return current.item;
}
或者,您也可以在public class Link:
内实现此功能,但这不可取,因为它会浪费您的调用堆栈空间:
public String get(int index)
{
assert ( index >= 0 )
if ( index == 0 ) {
return this.item;
} else {
index--;
if ( next == null ) {
return Null;
}
return next.get(index)
}
}
和公共类LinkedList:
public String get(int index)
{
return first.get(index);
}
希望这有帮助!
答案 2 :(得分:2)
首先,如果您要创建自己的LinkedList
类,则应将其命名为此类,而不是使用现有的LinkedList
类。所以,您可以使用MyLinkedList
其次,您无法通过索引访问LinkedList中的元素。这不是LinkedList
的工作原理,或者如果您正在创建自己的工作,则应该工作。而是根据价值获得它们。因此,您应该将值传递给get
方法,并遍历LinkedList
以获得具有给定值的相应Link
。
答案 3 :(得分:0)
public String get(int index)
{
assert index >= 0;
return get(index, first);
}
public String get(int index, Link cursor) {
if (cursor == null) {
return null;
} else if (index == 0) {
return cursor.toString();
} else {
return get(index-1, cursor.next);
}
}
public String get(int index)
{
assert index >= 0;
Link cursor = first;
while (index > 0) {
if (cursor == null) {
return null;
}
cursor = cursor.next;
index--;
}
return cursor.toString();
}
答案 4 :(得分:0)