我正在观看有关提供的数据结构和算法的视频here
首先,链表的代码写为
public class SListNode{
public Object item;
public SListNode next;
public SListNode(Object item,SListNode next){
this.item=item;
this.next=next;
}
public SListNode(Object item){
this(item,null);
}
public void insertAfter(Object item){
next=new SListNode(item,next);
}
public SListNode nth(int position){
if (position==1){
return this;
}
else if ((position<1)|| next==null){
return null;
}
else{
return next.nth(position-1);
}
}
然后讲师说这个实施有两个问题。
1)如果X和Y引用相同的列表,并且如果向x插入新项目,则y不会更新。我认为可以通过
检查public static void main (String args[]){
SListNode l1=new SListNode("milk",new SListNode(0,new SListNode(1)));
SListNode l2=l1;
l2=new SListNode("soap",l2);
System.out.println(l1.item+ " "+l1.next.item+ " " +l1.next.next.item);
System.out.println(l2.item+ " "+l2.next.item+ " " +l2.next.next.item);
2)创建空列表时。
因此,作为一个解决方案,单独创建了保持列表头部的SListClass。
public class SList{
privte SListNode head;
private int size;
public SList(){
head=null;
size=0;
}
public void insertFront(Object item){
head=new SListNode(item,head);
}
}
我不明白如何使用SList课程 如何使用此类创建链接列表?
如何连接SListNode和Slist类以及如何从SList调用SlistNode的方法?
此外,这个新实现如何为早期问题提供解决方案,如果X和Y引用相同的列表,并且如果将新项目插入x,则y不会更新。
我是编程和Java的新手,因此一个明确的解释是很好的
答案 0 :(得分:1)
这里有一个经典的LinkedList
实现。 SListNode
代表列表的单个节点,而SList
基本上代表整个列表。它管理列表的头部(通常还有一些其他属性,例如列表的大小,可能是对列表尾部的引用等)。
您通常只使用代码中的SList
,而不是封装和管理您的单SListNodes
。要做到SList
需要&#34;字典方法&#34;用于在列表中插入,删除,查找对象(这些对象封装在由SListNode
管理的SList
元素内)。这就是为什么我认为你上面的SList
- 类尚未完成。
您的代码示例
SListNode l1=new SListNode("milk",new SListNode(0,new SListNode(1)));
SListNode l2=l1;
l2=new SListNode("soap",l2);
没有显示教师说的内容。你在这里做的是创建一个引用SListNode
的{{1}}。然后你创建一个新的l1
- 对象并指向SListNode
(然后你创建一个&#34;循环引用&#34;到它自己)。当然,l2
和l1
不再引用相同的对象!