我想在下面的代码案例'F'和案例'S'中创建2个链接列表,以创建2个链接列表。
outer:while(true) {
switch(in.next().charAt(0))
{
case 'F':
switch(in.nextInt())
{
case 1:
ll.insertF(in.nextInt());
break;
case 2:
ll.insertR(in.nextInt());
break;
case 3:
try {
ll.insertP(ll.head, in.nextInt());
}
catch(Exception e)
{
System.out.println("Cannot do");
}
break;
case 4:
ll.display();
break;
case 5:
ll.deleteR();
break;
case 6:
ll.reverse();
break;
case 7:
ll.concat(l2.head);
break;
default:
break;
}
break;
case 'S':
switch(in.nextInt())
{
case 1:
l2.insertF(in.nextInt());
break;
case 2:
l2.insertR(in.nextInt());
break;
case 3:
try {
l2.insertP(l2.head, in.nextInt());
}
catch(Exception e)
{
System.out.println("Cannot do");
}
break;
case 4:
l2.display();
break;
case 5:
l2.deleteR();
break;
case 6:
l2.reverse();
break;
case 7:
l2.concat(ll.head);
break;
default:
break;
}
break;
default:
System.out.println("Out");
break outer;
}
}
获取输出:F4空的1个出
转到外部开关的第一种情况'F',然后选择情况4,然后直接转到外部开关并转到外部开关的'默认'。但是我不明白为什么在对内部开关“ F”进行一次case-4处理后,它会从内部开关中消失。
使用的功能是(如果需要):
public void insertF(int d)
{
Node temp= new Node(d);
temp.next=head;
head= temp;
}
public void insertR(int d)
{
Node temp= new Node(d);
if(head==null)
{
head=temp;
return;
}
Node cur=head;
while(cur.next!=null)
cur=cur.next;
cur.next=temp;
}
public void insertP(Node p,int d)
{
if(p==null) {
System.out.println("No");
return;
}
Node temp= new Node(d);
temp.next=p.next;
p.next=temp;
}
public void deleteR()
{
if(head==null)
{
System.out.println("Empty");
return;
}
if(head.next==null)
{
head=null;
return;
}
Node cur=head;
Node prev=null;
while(cur.next!=null)
{
prev=cur;
cur=cur.next;
}
cur=null;
prev.next=null;
}
public void reverse()
{
if(head==null ||head.next==null)
{
return;
}
Node cur=head;
Node temp=cur.next;
cur.next=null;
Node next;
while(temp.next!=null)
{
next=temp.next;
temp.next=cur;
cur=temp;
temp=next;
}
temp.next=cur;
head= temp;
System.out.println("Reversed");
}
public void concat(Node h2)
{
if((head==null && h2==null)||(h2==null))
{
return;
}
else if(head==null)
{
head=h2;
}
else {
Node cur=head;
while(cur.next!=null)
{
cur=cur.next;
}
cur.next=h2;
}
}
public void display()
{
if(head==null)
{
System.out.println("Empty");
return;
}
Node cur=head;
while(cur!=null)
{
System.out.print(cur.data+" ");
cur=cur.next;
}
System.out.println();
}
我相信问题是您在'F'开关的末尾有不必要的break;
,在这里:
case 'F':
switch(in.nextInt())
{
case 1:
ll.insertF(in.nextInt());
break;
case 2:
ll.insertR(in.nextInt());
break;
//...
default:
break;
}
break; // here
case 'S':
但是,我强烈建议您根据OOP原则重构代码,例如,代替嵌套开关,请执行以下操作:
case 'F':
handleF(in.nextInt());
case 'S':
handleS(in.nextInt());
您的代码很难阅读,甚至对您来说也是如此。