基础语法总结及链表操作

//后台开发
//安卓系统开发
//大数据开发(计算要求较高)
public class HelloWorld{
public static void main(String[] args){//程序入口函数
System.out.println(“你好世界”);
}
}
/*
面向对象的语言
类是一组蓝图,设计图稿
对象拿着蓝图制造出一组实例
类名称,重要:类名称必须和文件名一样
/
public class Course0716{
public static void main(String[] args){
//不用\n代表换行 %n代表换行
System.out.printf("%s%n",a[0])//第0个位置,没有指定参数就会越界
}
}
/

变量的定义(variable可变的)
标识符 identifier)
语法规则:变量类型 变量名称;
变量类型 变量名称=初始化值;
1.字面量 int a=10;
2.另一个字面量 int b=a;
3.方法的返回值 int m=max(a,b);
变量类型
1.基本类型(primarity type)
1)数值类型
整型
byte 一个字节 跟C语言不一样,在C语言中会根据机器的不一样所占字节数会不一样,但在java中是规定死了的
short 两个字节
int 四个字节
long 八个字节
浮点型 float–>四个字节 double–>八个字节
字符类型 char–>两个字节(Unicode 码点)
2)布尔类型 boolean true/false
2.引用类型(reference type)
1)数组引用
2)类引用
3)接口引用
3.什么是Unicode
ASCII 7bit A-Z
Unicode
GB(国标)
UTF-8
标识符(包含变量名,方法名,类名)的规定
1)必须以字母,或者 或 者 开 头 ( 不 能 以 数 字 或 者 特 殊 字 符 开 头 ) i n t 中 国 = 10 ; 2 ) 可 以 跟 字 母 , 数 字 , 下 划 线 , 美 元 符 或者_开头(不能以数字或者特殊字符开头) int 中国=10; 2)可以跟字母,数字,下划线_,美元符 int=102线,
3)长度理论上可以无限长
规范:
1.永远不要用中文作为标识符
2.不要出现$
3.不要出现下划线_,除了定义不可变的变量
4.变量(名词)
5.方法(动词)
类名称(每个单词首字都大写)
*/
//定义方法:
public static 返回值类型 方法名称(形参裂变){
//java中没有方法的声明只有定义
}
public static void main(String[] args){

}
public static int max(int a,int b){
if(a>b){
return a;
}else
{
return b;
}
}
/*字面量
int a=10;
10 int类型
10L/10l long类型
四种进制的表示:
二进制 0b001/0B001 0B001L
八进制 010
十进制 10
十六进制 0xFF/0XFF
1.0 double类型
1.0F/1.0f float类型
instanceof 判断变量是否指定类型
*/

1.方法的定义语句
标识符 返回值类型 方法名称(形参列表)
public static void main(String[] args){

}
2.方法的调用
//链表(逻辑上有前后关系,物理上不保证前后关系)
class Node{
int val;
Node next;//后继,下一个的引用
}
//如果nextnull,表示最后一个结点
public class NewList{
public static void main(String[] args){
Node head=null;
//head的意思是链表的第一个结点
//通过第一个结点,就可以找到完整的链表
//所以,链表的第一个结点往往代表整条链表
//空的链表就是一个结点都没有的链表,也就是没有第一个结点
//head
null表示第一个结点不存在,也就是整个链表为空
}
}
/*头插(两种情况,空链表和非空链表,但是两种情况是一样的)
1.如果要插入的数据没有结点,先给它装入一个结点中
Node node=new Node(); node是新对象的引用
node.value=0;
2.让原来的头结点称为新结点的下一个结点
node.next=head;
3.更新第一个结点
head=node
打印链表
Node cur=head;
while(cur!=null){
System.out.println(cur.val);
cur=cur.next;
}
for(Node cur=head;cur!=null;cur=cur.next){
System.out.println(cur);
}
尾插:(要分情况讨论,空链表和非空链表)
1.如果没在结点中装到结点里,让新结点的next=null
Node node=new Node(val);(构造方法已经让.next=null)
2.找到最后一个结点(子问题)找到.nextnull的结点
Node last=head;
while(last.next!=null){
last=last.next;
}
last就是最后一个结点
3.让原来的倒数第一个结点的下一个为新结点
last.next=node
对于空链表就是让新结点成为第一个结点
对于空链表就按如上处理
*/ private static Node pushBack(Node head,int val){
Node node =new Node(val);
if(head
null){
return node;
}else
{
Node last=head;
while(last.next!=null){
last=last.next;
}
last.next=node;
return head;
}
}
Node pushFront(Node haed,int val){
Node node=new Node(val);
node.next=head;
return node;
}

//头删
private Node popFront(Node head){
if(headnull)
{
System.out.println(“空链表无法删除”);
return;
}
//原来第一个结点,会因为没有引用指向而被回收
return head.next;
}
//尾删(分情况,只有一个结点,大于一个结点)
//找到倒数第二个结点
//lastSecond.next.next
null就是倒数第二个结点
//让倒数第二个的next=null
//原来的最后一个结点因为没有引用指向而被回收
private Node popBack(Node haed){
if(headnull){
System.out.println(“空链表无法删除”);
return;
}
//链表中只有一个结点的情况
if(head.next
null){//单独讨论,如果head.next为空,那么lastSecond.next也为空,下面对lastSecond.next.next就会有空指针异常
return null;
}else{
Node lastSecond=head;
while(lastSecond.next.next!=null){
lastSecond=lastSecond.next;
}
lastSecond.next=null;
}
return head;
}
//反转链表(不能创造新的结点)不断的从原来的链表中取出结点做头插
/*1)需要一个新的链表,并且是一个空链表
Node result=null;//result新链表的第一个结点的引用
2)遍历原来的链表
Node cur=head;
while(cur!=null){
cur=cur.next;
}
3)把每个遍历到的结点(cur),头插到新链表(result代表的链表)中
*/
public ListNode reverseList(ListNode head){
ListNode result=null;
ListNode cur=head;
while(cur!=null){
ListNode next=result;//后面cur.next会发生变动所以要找一个next记住这个位置
cur.next=result;
result=cur;
cur=next;
}
}
//用三个引用来进行逆置
public ListNode reverseList(ListNode head){
if(head==null){
return null;
}
List p1=null;
List p2=head;
List p3=head.next;
while(p2!=null){
p2.next=p1;
p1=p2;
p2=p3;
if(p3!=null){
p3=p3.next;
}
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值