在java中使用for循环打印链表

时间:2014-10-29 06:37:02

标签: java linked-list

我正在学习链表,并编写了一个示例代码来理解基础知识。我的代码有效,但有没有另一种方法可以使用没有while循环的for循环打印出列表?

我使用我制作的for循环欺骗了,因为我已经知道列表中的节点数。是否有使用for循环打印列表的不同方法?

public class FriendNode {
FriendNode next;
String name;

FriendNode(String name)
{
    this.name = name;
    this.next = null;
}

public FriendNode(String name, FriendNode n)
{
    this.name = name;
    this.next = n;
}
public FriendNode getNext()
{
    return this.next;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    FriendNode g = new FriendNode("Bob");
    FriendNode o = new FriendNode("Alice");
    FriendNode k = new FriendNode("Tom");
    FriendNode m = new FriendNode("Day");
    g.next = o;
    o.next = k;
    k.next = m;
    m.next = null;
    FriendNode current=g;
    while(current!=null)
    {
        System.out.println(current);
        current = current.next;
    }
    for(int i =0; i<4;i++)
    {
        System.out.println(current);
        current = current.next;
    }
}
}

3 个答案:

答案 0 :(得分:3)

你可以这样做:

for (FriendNode current=g; current != null; current = current.next) {
    System.out.println(current);
}

这假设g是第一个节点,因为这是在使用while循环打印列表时初始化current的方式。

它基本上和while循环一样,只是初始化和增量被移动到for表达式,这使它更紧凑。

答案 1 :(得分:3)

for循环不必纯粹与int一起工作,也不必递增或递减。这也是有效的:

for (FriendNode ii = g; ii != null; ii = ii.next)
{
    System.out.println(ii);
}

然而,两者的潜在问题是你冒着无限循环的风险 - 如果你将m.next设置为g,while循环和for循环都将永远执行。如果你需要,你可以通过保持对你已经开始使用的FriendNode(g)的引用来防止这种情况,如果我是g,则可以打破循环。

答案 2 :(得分:0)

您可以实现Iterable并使用for loop的“另一种”

    for (Friend f : new FriendList(g)) {
        System.out.println(f.name);
    }

我创建了一个使用FriendList的{​​{1}}。并将FriendNode对象放在Friend内,而不仅仅是一个字符串。 IMO将允许您更好地扩展前进。

实现如下:

FriendNode