带头结点的单链表List
import java.util.Scanner;
class List{
int data;
List next;
List(int x){ data = x;}
void append() {
List tail,p;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一组数,以-1结尾:");
int x = sc.nextInt();
tail = this; //tail = head; this代表对象自己,就是头结点
while(x != -1) {
p = new List(x);
tail.next = p;
tail = p;
x = sc.nextInt();
}
}
void print() {
for(List p=this.next; p!=null; p=p.next)
System.out.print(p.data+" ");
}
}
class App{
public static void main(String [] args) {
List h = new List(0);
h.append();
h.print();
}
}
头指针型的单链表List1
import java.util.Scanner;
class List1{
int data;
List1 next;
List1(int x){ data = x;}
List1 append() { //区别带头结点型
List1 tail,p;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一组数,以-1结尾:");
int x = sc.nextInt(); //区别带头结点型
if(x == -1) return null; //
this.data = x; //
x = sc.nextInt();
tail = this;
while(x != -1) {
p = new List1(x);
tail.next = p;
tail = p;
x = sc.nextInt();
}
return this;
}
void print() {
for(List1 p=this; p!=null; p=p.next) //区别
System.out.print(p.data+" ");
}
}
class App{
public static void main(String [] args) {
List1 h = new List1(0);
h = h.append(); //
if(h == null) //先判断,若直接h.print(),h为空时会报错
System.out.print("为空!");
else
h.print();
}
}
//本例掌握:
- this不得不用的场合,tail=this;即单链表中,表达【表头】自己
- 构造函数的作用:不是构造,而是初始化(构造,即分配空间,由new实现,空间大小由构造函数名决定)。