main中先将头结点随便初始化一个值,然后再在append中修改,append返回创建后的链表的头。
deleAllx():删除某个值时,先处理头,再确定pre和p,保证pre的值是不要被删除的,这样就可以直接while(p)循环而不会漏掉头
import java.util.Scanner;
class LinkedList{
int data; LinkedList next;
LinkedList(int x){data=x;}
LinkedList append(){
Scanner sc=new Scanner(System.in);
LinkedList tail,p;
int x=sc.nextInt();
if(x==-1) return null;
this.data=x;
x=sc.nextInt();
tail=this;
while(x!=-1){
p=new LinkedList(x);
tail.next=p;
tail=p;
x=sc.nextInt();
}
return this;
}
void show(){
for(LinkedList p=this;p!=null;p=p.next){
System.out.print(p.data+" ");
}
System.out.print("\n");
}
LinkedList deleAllX(int x){
LinkedList head=this;
while(head!=null&&head.data==x) head=head.next;
if(head==null) return null;
LinkedList pre=head,p=head.next;
while(p!=null){
if(p.data==x) {pre.next=p.next; p=p.next;}
else {pre=pre.next; p=p.next;}
}
return head;
}
}
class App{
public static void main(String[] args){
LinkedList h=new LinkedList(0);
System.out.println("请输入一组数,以-1结束");
h=h.append();
if(h==null) System.out.println("创建的链表是空的!");
else {System.out.println("创建的链表是:"); h.show();}
System.out.println("请输入要删除的值:");
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
System.out.printf("删除值为%d后的链表\n",x);
h=h.deleAllX(x);
if(h==null) System.out.println("为空!");
else h.show();
}
}

951

被折叠的 条评论
为什么被折叠?



