2012-07-18 62 views
0

我想实现一个方法,它需要一个整数和一个链接作为输入,并将链接插入链表之前的链接在位置输入整数,我已经实现了:insertBefore(int x,Link l)LinkedList Java

public void insertBefore(int num, String data) 
{ 
    Link current = head; 
    int count = 0; 
    while (current.next != null) 
    { 
     if(count == num) { 
     Link n = new Link(data); 
     n.next = current; 
     current.next = n.previous; 
     } 
    } 
    current = current.next; 
    count++; 

    } 

但是,当我cal方法没有任何反应和链接没有插入,所以任何人都知道该方法的问题?

+3

嗯,你的增量是外循环。事实上,这个代码会无限循环,除非列表只有一个头(如果它是空的并且没有头,它将会抛出一个NPE)。 – 2012-07-18 23:07:52

回答

1

如前所述,您的迭代构造不在迭代机制中。此外,您忘记将当前的前一个元素设置为指向新链接。不知道你使用的是什么样的链表,但这是一个改进。

if (count == num) { 
    Link n = new Link(data); 
    n.next = current; 
    current.previous.next = n; 
    n.previous = current.previous; 
    current.previous = n; 
} 

针对下面的评论,更完整的改进基于代码:

public void insertBefore(int num, String data) 
{ 
    Link current = head; 
    for (int count = 0; count < num && current.next != null; ++count) 
    { 
     current = current.next; 
    } 
    Link n = new Link(data); 
    n.next = current; 
    if (current.previous != null) 
     current.previous.next = n; 
    n.previous = current.previous; 
    current.previous = n; 
} 
+0

这仍然不能解决问题。你没有改变'current'和'while'的条件是基于'current.next'。它也忽略了这样一个事实,即通过使用它作为条件,如果列表只包含头部,则不能插入。 – 2012-07-18 23:13:13

+0

这是正确的,但我不想触摸循环构造,因为它已被提及。循环条件应该包括一个针对num的计数检查,因此循环条件不会在修改列表的代码中设置,只能在代码中迭代它。 – 2012-07-18 23:16:00

+0

公平 - 我也没有注意到'家庭作业'标签 – 2012-07-18 23:17:16