Java中的链接列表代码

时间:2014-04-29 13:41:38

标签: java algorithm data-structures linked-list

我正在观看有关提供的数据结构和算法的视频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的新手,因此一个明确的解释是很好的

1 个答案:

答案 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;到它自己)。当然,l2l1不再引用相同的对象!