2010-11-29 38 views
0

我想写一个java类CircularList其中包含了常用的节点内部类和实例变量:Java编程 - 循环链表

+2

这接缝像功课..我有没有猜呢? – 2010-11-29 04:43:25

+0

嗨同学学生! PLZ尝试一些事情,当你遇到困难时,我们可以推动你一点。伊莫看你的实验室实践中的第一堂幻灯片和第一个练习。 – Muggen 2010-11-29 04:44:27

+2

如果你向他们展示你到目前为止尝试过的东西,人们会乐于提供帮助。 – Naveen 2010-11-29 04:44:53

回答

0

提示...循环链表应该有一个和以前的,而不是第一个和最后。逻辑很重要

2

好的,我不会给你这个班的全部实施,而是我会给你一些建议。

  1. 您不需要持有对最后一个元素的引用。放置一个上一个和下一个引用到你的节点,你的最后一个节点将是第一个。预览
  2. 除了圆形列表没有结束的事实,它们与常规列表完全相同,但是在哪里可以找到像这样的最后一个项目:

    Node tmp = first;

    while(tmp.Next!= null) tmp = tmp.Next;

在循环链表的想法是这样的:

Node tmp = first; 

while (tmp.Next != first) 
    tmp = tmp.Next; 

因为你永远也找不到指向空节点,除非该列表是空的。最后一个建议是,如果你需要实现一个索引,记得在一个循环表有作为指标超出范围,没有这样的事,因为

list[count] = list[0] = list[count * k] 

记住这一点,因此在计算你的这些方法的指数可相当棘手。对于正面指标,主要思路是:

index = index % count; 

对于负值略有不同。我希望我能用我的话帮助你。如果你想要一个实现,我相信,如果你礼貌地问谷歌,应该有几个:)

祝你好运!

2

我不确定你的问题是什么,你似乎有所需的一切。链接列表和普通列表之间唯一的区别就是增加结尾。

在常规链接列表中,您将创建一个新节点并将最后一个元素指向该节点。在这种情况下,您将•Last节点中的指针更改为指向新节点,并将新节点指向•First。

删除工作方式与正常链接列表相同。每当你想删除一个节点时,你会发现哪一个节点指向那个节点(先前,或者在删除第一个节点的情况下,选中•Last),并指向被删除节点指向的任何节点。

如果这不能解决您的问题,请告诉我,我会尽力帮助。

只注意到有人已经要求完全一样的问题: Can I use java.util.LinkedList to construct a circular/cyclic linked list?

0
class Node { 
    int value; 
    Node next; 
    Node prev; 
    Node(int initialValue) { 
     value = initialValue; 
     next = null; 
     prev = null; 
    } 
    public int getValue() { 
     return this.value; 
    } 
} 

class NodeList { 
    Node pointer; 
    NodeList() { 
     pointer = null; 
    } 
    public void insertNode(int nodeValue) { 
     Node newNode = new Node(nodeValue); 
     if(pointer == null) { 
      newNode.next = newNode; 
      newNode.prev = newNode; 
     }else if(pointer.next == null && pointer.prev == null && pointer != null) { 
      newNode.next = pointer; 
      newNode.prev = pointer; 
      pointer.prev = newNode; 
      pointer.next = newNode; 
     } 
     else if(pointer != null) { 
      newNode.next = pointer.next; 
      newNode.prev = pointer; 
      pointer.next.prev = newNode; 
      pointer.next = newNode; 
     } 
     pointer = newNode; 
     System.out.println(“Successfully inserted : ” + pointer.getValue()); 
    } 
    public void printRing(boolean direction) { 
     Node tempNode = pointer; 
     do { 
      System.out.println(“Value = ” + tempNode.getValue()); 
      tempNode = direction ? tempNode.next : tempNode.prev; 
     } while(tempNode.value != pointer.value);  
    }  
}