Linked List实现无限循环

时间:2013-03-10 06:29:08

标签: java linked-list

这是我在java中链表的代码。代码进入无限循环,我无法弄清楚问题。可能出错的地方。

import java.io.*;
class LinkedList
{
public int data;
public LinkedList next;
LinkedList add(int a,LinkedList ob)
{   
    LinkedList p=ob;
    if(ob==null)
    {
        this.data=a;
        ob=this;
        return ob;
    }   
    else
    {
        while(p.next!=null)
        {   
            if(p.next==null)
            break;
            else
            p=p.next;
        }
        this.data=a;
        this.next=null;
        p.next=this;
    }
    return null;    
}
void display(LinkedList ob) 
{
    LinkedList p=ob;
    while(p!=null)
    {
        System.out.println(p.data); 
        p=p.next;
    }   
}
public static void main(String []args)throws IOException
{
    LinkedList head=null;
    LinkedList o=new LinkedList();
    head=o.add(5,head);
    o.add(6,head);
    o.add(7,head);
    o.display(head);        
}
}

头部正确进入,但是其他元素正在产生问题。

2 个答案:

答案 0 :(得分:2)

你也应该有一个LinkedList toAdd(这应该是一个节点,但你这样做的方式是一个LinkedList)

LinkedList p=ob;
LinkedList toAdd=new LinkedList();

并在add方法的最后设置部分,将其替换为toAdd

toAdd.data=a;
toAdd.next=null;
p.next=toAdd;

答案 1 :(得分:2)

之后

o.add(6,head);


在add(),

p.next=this; // this is causing infinite loop. A node is pointing to itself.<br>

请参考以下add()方法到LinkedList:

LinkedList add(int a,LinkedList ob)
{   
    //for creating head
    if(ob==null)
    {
        this.data=a;
        ob=this;
        return ob;
    }   
    else
    {
        // iterate till the last node
        while(ob.next!=null)
        {               
            ob = ob.next;
        }
        LinkedList p = new LinkedList();
        p.data = a;
        p.next = null;
        ob.next = p;        
    }
    return null;    
}