【发布时间】:2013-12-19 17:26:42
【问题描述】:
以下是两个类:
import java.io.*;
class Node
{
int data;
Node link;
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
void accept()throws IOException
{
System.out.println("Enter a number: ");
data=Integer.parseInt(buf.readLine());
}
}
import java.io.*;
class LinkedList
{
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
Node start=new Node();
void create()throws IOException
{
Node n=new Node();
n.accept();
start.link=n;
}
void addbeg()throws IOException
{
Node n=new Node();
n.accept();
n.link=start.link;
start.link=n;
}
void addend()throws IOException
{
Node n=new Node();
n.accept();
Node n1=new Node();
n1=start.link;
while(n1.link!=null)
{
n1=n1.link;
}
n1.link=n;
n.link=null;
}
void addafter()throws IOException
{
boolean flag=false;
System.out.println("Enter data after which node is to be added: ");
int d=Integer.parseInt(buf.readLine());
Node n=new Node();
n.accept();
Node n1=start.link;
while(n1.link!=null)
{
if(n1.data==d)
{
flag=true;
break;
}
n1=n1.link;
}
if(flag==true)
{
n.link=n1.link;
n1.link=n;
}
else
System.out.println("Data is not present in the list");
}
void addbefore()throws IOException
{
boolean flag=false;
Node n=new Node();
n.accept();
System.out.println("Enter the data before which node is to be added: ");
int d=Integer.parseInt(buf.readLine());
Node n1=start.link;
Node prev=start;
while(n1.link!=null)
{
if(n1.data==d)
{
n.link=n1;
prev.link=n;
flag=true;
break;
}
else
{
prev=n1;
n1=n1.link;
}
}
if(flag==false)
{
System.out.println("Data not found");
}
}
void delbeg()
{
Node n=start.link;
start.link=n.link;
n.link=null;
}
void delend()
{
Node n=start.link;
Node prev=start;
while(n.link!=null)
{
prev=n;
n=n.link;
}
prev.link=null;
}
void delspecific()throws IOException
{
boolean flag=false;
System.out.println("Enter data to be deleted: ");
int d=Integer.parseInt(buf.readLine());
Node n=start.link;
Node prev=start;
while(n.link!=null)
{
if(n.data==d)
{
prev.link=n.link;
n.link=null;
flag=true;
}
else
{
prev=n;
n=n.link;
}
}
if(flag==false)
{
System.out.println("Data is not present in the list");
}
}
void display()
{
System.out.println("Linked List: ");
Node n=start.link;
do
{
System.out.print(n.data+" -> ");
n=n.link;
}
while(n.link!=null);
System.out.println();
}
void main()throws IOException
{
boolean flag=false;
while(!flag)
{
System.out.println("Enter choice: ");
System.out.println("1. Create ");
System.out.println("2. Add at the Beginning ");
System.out.println("3. Add at the End ");
System.out.println("4. Add after a particular node ");
System.out.println("5. Add before a particular node ");
System.out.println("6. Delete at the Beginning ");
System.out.println("7. Delete at the End ");
System.out.println("8. Delete a specific node ");
System.out.println("9. View ");
System.out.println("10. End ");
int ch=Integer.parseInt(buf.readLine());
switch(ch)
{
case 1:create();
break;
case 2:addbeg();
break;
case 3:addend();
break;
case 4:addafter();
break;
case 5:addbefore();
break;
case 6:delbeg();
break;
case 7:delend();
break;
case 8:delspecific();
break;
case 9:display();
break;
case 10:flag=true;
System.exit(0);
break;
}
}
}
}
当我执行任何函数并查看链表时,总是缺少最后一个节点。在过去的四个小时里,我一直在研究这个程序,当最后一个节点没有显示时,我感到很惊讶。请帮忙
【问题讨论】:
-
请善待并格式化您的代码。没有缩进就很难阅读。
-
当这种情况发生时,通过打印一些信息进行调试。您也可以单步执行代码,但这可能不是必需的。我没有查看您的代码,但可能需要几分钟才能找到错误。
-
我不知道出了什么问题...应该是正确的...如果有人可以在他们的系统上复制并运行它,那将会很有帮助。
-
对这个庞大的程序感到抱歉,但这就是我在过去四个小时内为它工作所创造的……虽然它很容易理解
-
在您的
display方法中,您从Node n=start.link;开始。为什么不Node n=start;?好像你错过了第一个节点
标签: java list linked-list