return length;
}
public IntSLList(){ //构造函数,初始化head和tail,length;
this.head=null;
this.tail=null;
length=0;
}
public boolean isEmpty(){ //判断是否为空链表
return head==null;
}
public void addToHead(int value){ //在head节点前插入值为value的新节点
head=new IntNode(value,head);
if(tail==null){
tail=head;
}
length++;
}
public void addToTail(int value){ //在tail节点后插入值为value的新节点
if(this.isEmpty())
head=tail=new IntNode(value);
else{
tail.next=new IntNode(value);
tail=tail.next;
}
length++;
}
public int deleteFromHead(){ //删除头节点,返回头节点value信息
int value=head.value;
if(head==tail)
head=tail=null;
else
head=head.next;
length–;
return value;
}
public int deleteFromTail(){
int value=tail.value;
if(head==tail)
head=tail=null;
else{
IntNode temp;
for(temp=head;temp.next!=tail;temp=temp.next); //空循环,旨在移动temp
tail=temp;
tail.next=null;
}
length–;
return value;
}
public void printAll(){
if(this.isEmpty())
System.out.println(“单链表为空!”);
else{
IntNode temp=head;
System.out.print(“单链表为:”);
while(temp!=null){
System.out.print(temp.value+" ");
temp=temp.next;
}
System.out.println();
}
}
public boolean isInList(int value){
IntNode temp=head;
boolean b=false;
while(temp!=null){
if(temp.value==value){
b=true;
break;
}
temp=temp.next;
}
return b;
}
public void deleteByValue(int value){ //根据节点值删除节点
int flag=0;
if(head.valuevalue&&headtail){ //如果只有一个节点
head=tail=null;
flag=1;
}
else if(head.value==value){ //不止一个节点,但目地节点在头节点
head=head.next;
flag=1;
}
else{ //不止一个节点,目地节点不再头节点
IntNode temp,pred;
for(pred=head,temp=head.next;temp!=null&&temp.value!=value;temp=temp.next,pred=pred.next);
if(temp!=null){
pred.next=temp.next;
flag=1;
}
}
if(flag==1){
System.out.println(“元素”+value+“删除成功!”);
length–;
}
else
System.out.println(“元素”+value+“不再链表中!”);
}
public int deleteByIndex(int index){ //根据下标删除节点
int deleteValue=index;
if(this.isEmpty()){
System.out.print(“空链表,无法进行删除操作!”);
return deleteValue;
}
else if(index>-1&&index<this.length){
if(index==0)
deleteValue=this.deleteFromHead();
else if(index==this.length-1)
deleteValue=this.deleteFromTail();
else{
IntNode temp=head;
int i=0;
for(i=0;i<index-1;i++){
temp=temp.next;
}
deleteValue=temp.next.value;
temp.next=temp.next.next;
length–;
}
}
else{
System.out.println(“下标越界”);
}
return deleteValue;
}
public void reverseList(){ //反转链表
IntNode p=head,q=null,r=null,m=null;
if(!this.isEmpty()){
if(this.length==1)
q=p;
else if(this.length==2){
q=p.next;
q.next=p;
p.next=null;
}
else{
q=p.next;
r=q.next;
while(q!=null&&r!=null){
q.next=p;
p.next=m;
m=p;
p=q;
q=r;
r=r.next;
}
q.next=p;
}
head=q;
}
else{
System.out.println(“链表为空!”);
}
}
public void insertByValue(int value,int insertValue){ //在value前插入insertValue
if(this.isInList(value)){
IntNode p=head,q=null;
if(p.value==value)
this.addToHead(insertValue);
else{
q=p.next;
while(q!=null){
if(q.value==value)
break;
else{
q=q.next;
p=p.next;
}
}
IntNode valueNode=new IntNode(insertValue);
valueNode.next=q;
p.next=valueNode;
length++;
}
}
else{
System.out.print(“元素”+value+“不在链表中!”);
}
}
public void insertByIndex(int index,int insertValue){
if(!this.isEmpty()){
if(index>-1&&index<this.length){
if(index==0)
this.addToHead(insertValue);
else{
IntNode p=head,q=null;
int j=0;
for(j=0;j<index-1;j++)
p=p.next;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料分享给大家,戳这里即可领取
新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料分享给大家,戳这里即可领取
[外链图片转存中…(img-jZzfZHSJ-1713342615861)]