最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
// 查找单链表中倒数第k个节点【新浪面试题】
public void getNode(int k){
if(head.next==null){
System.out.println(“链表为空”);
return;
}
HeroNode2 temp = head.next;
int length = listNum();//4
if(k<=0||k>length){
System.out.println(“无此节点”);
}
int key = length-k+1;//k=2 4-2+1
while(key>1){
temp = temp.next;
key–;
}
System.out.println(temp);
}
//单链表的反转
public void ReverseLinkedList(){
if(head.next==null){
System.out.println(“链表为空”);
return;
}
HeroNode2 reverseNode = new HeroNode2(0,“”);
HeroNode2 cur = head.next;
HeroNode2 temp = null;
while(cur!=null){
temp = cur.next;
cur.next = reverseNode.next;
reverseNode.next=cur;
cur=temp;
}
head.next = reverseNode.next;
}
利用栈的先进后出的特点
利用栈的数据结构,将各个节点压入到栈中,然后利用栈的先进后出的特点,实现逆序打印
//单链表逆序输出,使用Stack栈
public void listByStack(){
if(head.next==null){
System.out.println(“单链表为空”);
return;
}
HeroNode2 temp = head;
Stack stack = new Stack<>();
while (temp.next!=null){
stack.add(temp.next);
temp=temp.next;
}
while (stack.size()>0){
System.out.println(stack.pop());
}
}
我们可以使用双指针算法来破解
//合并两个单链表,合并之后依然有序
public LinkedListMove TwoToOne(LinkedListMove list1,LinkedListMove list2,int size1,int size2){
LinkedListMove list3 = new LinkedListMove();
HeroNode2 temp1 = list1.head.next;
HeroNode2 temp2 = list2.head.next;
HeroNode2 temp3 = list3.head;
while(temp1!=null||temp2!=null){
if(temp1==null){
//此时temp2不为空,将temp2中的所有数据放到temp3后面即可
while (temp2!=null){
temp3.next=temp2;
temp3 = temp3.next;
temp2 = temp2.next;
}
break;
}
if(temp1==null){
//此时temp2不为空,将temp2中的所有数据放到temp3后面即可
while (temp1!=null){
temp3.next=temp1;
temp3 = temp3.next;
temp1 = temp1.next;
}
break;
}
if(temp1.no<temp2.no){
temp3.next=temp1;
temp3 = temp3.next;
temp1 = temp1.next;
continue;
}
if(temp2.no<temp1.no){
temp3.next=temp2;
temp3 = temp3.next;
temp2 = temp2.next;
continue;
}
}
return list3;
}
==================================================================
package org.wql.LinkedList;
import java.util.Stack;
/**
-
Description
-
User:
-
Date:
-
Time:
*/
public class SingleLinkedListTest {
public static void main(String[] args) {
HeroNode2 hero1 = new HeroNode2(1, “aaa”);
HeroNode2 hero3 = new HeroNode2(3, “ccc”);
HeroNode2 hero7 = new HeroNode2(7, “ccc”);
HeroNode2 hero8 = new HeroNode2(8, “ccc”);
HeroNode2 hero2 = new HeroNode2(2, “bbb”);
HeroNode2 hero4 = new HeroNode2(4, “ddd”);
HeroNode2 hero9 = new HeroNode2(9, “ccc”);
HeroNode2 hero11 = new HeroNode2(11, “ccc”);
LinkedListMove list1 = new LinkedListMove();
list1.add(hero1);
list1.add(hero3);
list1.add(hero7);
list1.add(hero8);
LinkedListMove list2 = new LinkedListMove();
list2.add(hero2);
list2.add(hero4);
list2.add(hero9);
list2.add(hero11);
System.out.println(“单链表1:”);
list1.list();
System.out.println(“单链表2:”);
list2.list();
System.out.println(“利用双指针算法合并:”);
LinkedListMove list3 = list1.TwoToOne(list1, list2, 4, 4);
list3.list();
// LinkedListMove linkedListMove = new LinkedListMove();
// linkedListMove.add(hero1);
// linkedListMove.add(hero2);
// linkedListMove.add(hero3);
// linkedListMove.add(hero4);
// System.out.println(“求单链表中有效节点的个数”);
// int length = linkedListMove.listNum();
// System.out.println(“有效个数为:”+length);
}
}
//对联表进行操作的类
class LinkedListMove{
//头节点
HeroNode2 head = new HeroNode2(0,“”);
//在结尾添加节点
public void add(HeroNode2 node){
HeroNode2 temp = head;
while (true){
if (temp.next==null){
temp.next=node;
break;
}
temp=temp.next;
}
}
//按照顺序添加节点
public void addByOrder(HeroNode2 node){
HeroNode2 temp = head;
while (true){
if(temp.next==null){
add(node);
break;
}
if(temp.next.no>node.no){
node.next=temp.next;
temp.next=node;
break;
}
temp=temp.next;
}
}
//遍历单链表
public void list(){
if(head.next==null){
System.out.println(“无法遍历链表,链表为空!”);
return;
}
HeroNode2 temp = head;
while (true){
if (temp.next==null){
break;
}
temp=temp.next;
System.out.println(temp);
}
}
//输出单链表中有效节点的个数
public int listNum(){
if(head.next==null){
System.out.println(“无法遍历链表,链表为空!”);
return -1;
}
HeroNode2 temp = head;
int sum=0;
while (true){
if (temp.next==null){
break;
}
temp=temp.next;
sum+=1;
}
return sum;
}
// 查找单链表中倒数第k个节点【新浪面试题】
public void getNode(int k){
if(head.next==null){
System.out.println(“链表为空”);
return;
分享
首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)
其次分享一些技术知识,以截图形式分享一部分:
Tomcat架构解析:
算法训练+高分宝典:
Spring Cloud+Docker微服务实战:
最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
Java高级架构面试知识整理:
Tomcat架构解析:
[外链图片转存中…(img-lmVqyxOF-1715241088461)]
算法训练+高分宝典:
[外链图片转存中…(img-g7uJOutZ-1715241088461)]
Spring Cloud+Docker微服务实战:
[外链图片转存中…(img-dY4nrgZf-1715241088462)]
最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
[外链图片转存中…(img-4dFV658v-1715241088462)]
Java高级架构面试知识整理:
[外链图片转存中…(img-h0rfa69K-1715241088463)]