链表的动æ€å®žçŽ°

时间:2011-12-10 11:23:07

标签: java linked-list singly-linked-list

class Nodetype
{
  int info;
  Nodetype next;

  Nodetype(int i)
  {
     info=i;
     next=null;
  }
}

我的教科书有这个代ç åŠ¨æ€åˆ›å»ºé“¾æŽ¥åˆ—表。 问题是,当程åºé€è¡Œæ‰§è¡Œæ—¶ï¼Œå®ƒå°†å˜é‡'info'定义为类型'int'&然åŽå˜é‡'next'作为Nodetype。

这里到底å‘生了什么?

是å¦æ„味ç€å˜é‡'next'å°†åŒ…å« -

  1. 构造函数'Nodetype'
  2. int info
  3. Nodetype“nextâ€ï¼Œå…¶ä¸­â€œnextâ€å°†å†æ¬¡æ‹¥æœ‰1,2,3&然åŽ3å°†å†æ¬¡æ‹¥æœ‰1,2,3 ...等等......直到无穷大?
  4. 我真的很烦,因为我无法ç†è§£å®ƒæ˜¯å¦‚何工作的,有人å¯ä»¥è½»æ˜“解释一下å—?

9 个答案:

答案 0 :(得分:3)

您的代ç éžå¸¸ç¬¦åˆåˆ—表的定义:列表为null或åŽè·Ÿåˆ—表的元素。
在您的情况下,“元素â€ç”±int值定义,“åŽè·Ÿâ€éƒ¨åˆ†æ˜¯nextå˜é‡;在Javaå˜é‡ä¸­ï¼ˆå½“它们ä¸æ˜¯æ–‡å­—,因为int值是)实际上是指针,所以虽然它们没有被åˆå§‹åŒ–,但它们ä¸å­˜å‚¨ä»»ä½•æœ‰æ•ˆå€¼ï¼Œå¹¶ä¸”它们ä¸æŒ‡å‘任何内存区域(å³å®ƒä»¬çš„值为null),因此当nextå˜é‡ä¿æŒåŽŸæ ·æ—¶ï¼Œæ‚¨çš„元素ä¸ä¼šè¢«ä»»ä½•å…¶ä»–元素跟éšã€‚è¦åŠ¨æ€åœ°å‘列表添加元素,您需è¦ä¸€ä¸ªæŒ‡å‘您添加的最åŽä¸€ä¸ªå…ƒç´ çš„指针,å¦åˆ™æ‚¨å°†æ— æ³•å†æ¬¡æ‰¾åˆ°å®ƒä»¬ï¼š

int i = 0;
Nodetype head = new Nodetype(i++);
Nodetype last = new Nodetype(i++);
head.next = last;
while (i<5) {
    Nodetype temp = new Nodetype(i++);
    last.next = temp;
    last = temp;
}
while(head) {
    System.out.println(head.info);
    head = head.next;
}

请注æ„,在最åŽå‡ è¡Œä¸­ï¼Œæ‚¨ä¸¢å¤±äº†head指针并且无法返回列表的起点。在使用列表时请记ä½è¿™ä¸€ç‚¹;)

答案 1 :(得分:1)

第一个å˜é‡next没有指å‘任何对象(它指å‘null)。在æŸäº›æ—¶å€™ï¼Œæ‚¨å°†æŒ‡å‘å¦ä¸€ä¸ªnext = new NodeType(number)çš„èŠ‚ç‚¹ã€‚è¿™ä¸ªæƒ³æ³•æ˜¯ä½ ä½¿ç”¨ç»„åˆ - 你有一个类的实例,它有一个对å¦ä¸€ä¸ªå®žä¾‹çš„引用。就åƒnodeA指å‘nodeB,nodeB指å‘nodeC。这里有三个实例,第一个实例引用第二个实例,第二个实例引用第三个实例。第三个例å­æ˜¯æœ€åŽä¸€ä¸ªï¼Œå…¶ä¸‹ä¸€ä¸ªå®žä¾‹æŒ‡å‘null。

答案 2 :(得分:1)

字段next是对Nodetype类型对象的引用。起åˆå®ƒå°†æŒ‡å‘什么 - 因为它被实例化为null。当你给它赋值时,它åªä¼šæŒ‡å‘那个值,除éžä½ åœ¨åˆ—表中创建一个循环,å¦åˆ™ä»€ä¹ˆéƒ½ä¸ä¼šæ— é™å»¶ç»­ã€‚

答案 3 :(得分:1)

您创建了类NodeType,并在类中定义了该类的对象。因此,该对象(在您的示例中为next)将具有int infoå˜é‡NodeType next对象和构造函数。

答案 4 :(得分:1)

next是对å¦ä¸€ä¸ªNodetype实例的引用。如果next == null,则表示当å‰å…ƒç´ æ˜¯åˆ—表中的最åŽä¸€ä¸ªå…ƒç´ ã€‚

让我们看一个例å­ï¼š

Nodetype node = new Nodetype(0);        // i = 0, next = null
Nodetype anotherNode = new Nodetype(1); // i = 1, next = null
node.next = anotherNode;                // now the first node has a ref to the second

答案 5 :(得分:1)

它将包å«Null,因为å˜é‡æœªåˆå§‹åŒ–为任何值。

答案 6 :(得分:1)

Nodetype是您的类,它定义节点实例将包å«çš„æ•°æ®ä»¥åŠå¯¹é“¾æŽ¥åˆ—表中下一个节点的引用。对下一个节点的引用将是Nodetype类型的对象。这里没什么难的,这是链接列表的ç»å…¸å®žçŽ°ã€‚

您å¯èƒ½æƒ³æŸ¥çœ‹æ–¯å¦ç¦å¤§å­¦çš„great linked list resourc e。

答案 7 :(得分:1)

è¿™ç§æ–¹æ³•çš„工作方å¼æ˜¯åˆ—表由å•ä¸ªå…ƒç´ ç»„æˆï¼Œæ¯ä¸ªå…ƒç´ åªæœ‰ä¸€ä¸ªæŒ‡å‘它åŽé¢çš„元素的指针:

Nodetype next;

列表中æ¯ä¸ªå…ƒç´ å®žé™…拥有的信æ¯æ˜¯ï¼š

int info;

您å¯ä»¥å°†åˆ—表视为“链â€ï¼šå®ƒä¸æ˜¯å•ä¸ªå¯¹è±¡ï¼Œè€Œæ˜¯å¤šä¸ªé“¾æŽ¥çš„å¤åˆå¯¹è±¡ã€‚从æ¯ä¸ªé“¾æŽ¥ï¼Œæ‚¨åªèƒ½çœ‹åˆ°ä¸‹ä¸€ä¸ªé“¾æŽ¥ï¼ˆæˆ–者,如果链接列表在两个方å‘都有引用:下一个和上一个链接),那么为了使所有元素å¯ç”¨ï¼Œæ‚¨å°†å¿…é¡»ä¿ç•™å¼•ç”¨åˆ°â€œé“¾â€ä¸­çš„第一个元素。

注æ„:List个对象是å•ä¸ªå¯¹è±¡ï¼Œå®ƒä»¬å¼•ç”¨äº†â€œé“¾â€çš„第一个链接。

答案 8 :(得分:0)

ulElement.appendChild(fragment); 

它的工作。