- 创建一个链表
//创建一个链表
public static Node createList(){
//创建四个Node实例,再定义四个引用来分别指向这四个实例
//随着方法的结束,a,b,c,d也随之销毁
Node a=new Node(1);
Node b=new Node(2);
Node c=new Node(3);
Node d=new Node(4);
//给引用进行赋值
//"."操作为解引用操作,根据地址找到对象的本体,对对象本体进行操作
a.next=b;
//next和b类型相同,都是Node类型的引用,引用之间的"="赋值,就是把地址写过去
b.next=c;
c.next=d;
d.next=null;
//将a的地址返回到方法外面去了
return a;
}
//将a的地址返回到这里,将地址交给head这个引用来保存(head引用保存的也是一个地址)
Node head=createList();
- 遍历链表
(1)带傀儡节点的链表
head会指向一个单独的傀儡结点(head中存放的是傀儡结点的地址),傀儡结点的next指向a
for(Node cur=head.next;cur!=null;cur=cur.next){
System.out.println(cur.val);
}
(2)不带傀儡结点的链表
for(Node cur=head;cur!=null;cur=cur.next){
System.out.println(cur.val);
}
- 通过遍历,找到链表的最后一个结点
Node cur=head;
while(cur.next!=null){
cur=cur.next;
}
System.out.println(cur.val);
- 通过遍历,找到链表的倒数第二个结点
Node cur=head;
//要保证当前链表不为空,且cur.next不为空,否则进行解引用时会报错
while(cur!=null&&cur.next!=null&&cur.next.next!=null){
cur=cur.next;
}
System.out.println(cur.val);
- 遍历链表,找到链表的第N个结点
//取链表的第N个结点,假设N=3
int N=3;
//创建一个cur引用指向头节点
Node cur=head;
for(int i=1;i<N;i++){
cur=cur.next;
}
System.out.println(cur.val);
- 计算链表中元素的个数
//计算链表中元素的个数
int n=0;
for(Node cur=head;cur!=null;cur=cur.next){
n++;
}
System.out.println(n);
- 遍历链表,找到链表的倒数第N个结点
//计算链表中元素的个数
int n=0;
for(Node cur=head;cur!=null;cur=cur.next){
n++;
}
//假设要找链表中倒数第三个结点
int N=3;
Node cur=head;
//根据规律可得:倒数第N个结点即整数第n+1-N个结点
for(int i=1;i<n+1-N;i++){
cur=cur.next;
}
System.out.println(cur.val);
- 通过遍历,找到链表上是否存在某个元素
//假设所找的元素为5
int n=5;
Node cur=head;
for(;cur!=null;cur=cur.next){
if(cur.val==n){
break;
}
}
if(cur!=null) {
System.out.println("存在");
}
else{
System.out.println("不存在");
}