第六周总结
课堂总结
1.一个类,如果没有写构造方法,系统会自动形成一个无参构造方法,最好还是自己写一个无参构造,避免不必要的报错
2.在重载的构造方法中,可以直接用this指代其他的构造方法,可以直接调用。比如,无参构造方法中调用有参构造方法,但是一不小心就会报错,:call to this must be first statement in consructor,这里就是调用的注意点,在重载中调用其他的构造方法必须写在方法体第一句 。
3.实例代码只有构造方法被调用时执行,且先于构造方法执行(可用于检测和准备),相比于static代码块,范围小,仅存在于构造方法中
4.static 方法是类方法,不能调用this
课后总结
创建单链表
翻了几个博客,都是直接创建首尾节点,或者是直接单独用Node类来创建,那样太麻烦且适用范围小
按照作业要求,构造三个类,一个是链表类,一个节点类,一个测试类
一开始我一直在疑惑怎么将首尾节点连起来,即头插法创建的节点怎么连上尾插法创建的节点。
解决方法很简单,就是当创建第一个节点的时候,把它当作头节点和尾节点,这样后面不论是头插还是尾插都是直接有指针的
package qing;
import Nodes.Nodes;
public class qingLinkedlist//链表类
{
public Nodes first;//标记头结点
public Nodes last;//表记尾节点
public int size;//纪录链表长度
public qingLinkedlist()//无参构造链表
{
first = null;
last = null;
}
public void show()//打印链表函数
{
Nodes f = first;
if(f==null)
System.out.println("链表已清空!");
while(f!=null)
{
System.out.println(f.data+" "+f.name);
f = f.next;
}
}public void addFirst(int data, String name)//在头部添加结点(头插法)
{
Nodes xin = new Nodes(data,name);//创建新的结点
if(first==null&&last == null)//判断是否有头节点
{
xin.next = last;
first= xin;//有则直接赋值为头结点
last = xin;
size = 1;//长度增加
}
else
{
xin.next = first;//无则先将之前的头节点赋值为下一个节点
first = xin;//在将这个新节点赋值为头结点
size++;//长度增加
}
}
public void addLast(int data, String name)//尾部添加节点(尾插法)
{
Nodes xin = new Nodes(data ,name);
{
if(first==null&&last == null)//没有尾结点的时候添加尾结点
{
last = xin;
first = xin;
size = 1;
}
else
{
last.next = xin;
last = xin;
size++;
}
}
}
package Nodes;//节点类
public class Nodes
{
public int data;
public String name;
public Nodes next = null;//指针,指向下一个节点
public Nodes(){}//一定要记得自写无参构造
public Nodes(int data,String name)//有参构造赋值
{
this.data = data;
this.name = name;
}
}
import Nodes.Nodes;
import java.util.*;
import qing.qingLinkedlist;
public class Test//测试类
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
qingLinkedlist mylist = new qingLinkedlist();//创建空链表
System.out.println("请输入指令:1-添加头节点,2-添加尾结点,3-打印链表,100-退出");
int zl=0;//用指令进行对应操作
zl = in.nextInt();
int data=0;
String name = null;
while(zl!=100)
{
if(zl==1||zl==2)
{
System.out.println("请输入数据:年龄 姓名");
data = in.nextInt();
name = in.nextLine();
}
if(zl==1)
{
mylist.addFirst(data,name);//头插法操作
}
if(zl==2)
{
mylist.addLast(data,name);//尾插法操作
}
if(zl==3)
{
mylist.show();//打印链表
}
if(zl==4)
{
mylist.clear();//清除链表
}
if(zl==5)
{
System.out.println("链表长度为"+mylist.size());//打印链表长度
}
System.out.println("请输入指令:1-添加头节点,2-添加尾结点,3-打印链表,4-清除链表,5-显示长度,100-退出");
zl = in.nextInt();
}
}
}