单链表大厂面试题(手撕代码环节)
1.查看链表倒数第k个节点
public static Student findLastIndexStudent(Student head,int index){
if(head.next==null){
return null;
}
int size = getLength(head);
if(index <= 0 || index >size){
return null;
}
Student temp = head.next;
for(int i=0;i<size-index;i++){
temp=temp.next;
}
return temp;
}
2.逆转单链表
public static void ReverseList(Student head){
if(head.next == null || head.next.next ==null){
return ;
}
Student ReverseHead = new Student(0,"",0);
Student temp = head.next;
Student temp1 = null;
while (temp != null) {
temp1 = temp.next;
temp.next = ReverseHead.next;
ReverseHead.next = temp ;
temp = temp1;
}
head.next=ReverseHead.next;
}
3.单链表逆序打印
public static void ReversePrint(Student head){
if(head.next == null ){
return ;
}
Stack<Student> stack = new Stack<Student>();
Student temp = head.next;
while (temp != null){
stack.push(temp);
temp= temp.next;
}
while (stack.size()>0){
System.out.println(stack.pop());
}
}
}
4.完整代码如下:
public class SingleLinkedListDemo {
public static void main(String[] args) {
Student student1 = new Student(1,"tom",18);
Student student2 = new Student(2,"kiki",19);
Student student3 = new Student(3,"lily",19);
Student student4 = new Student(4,"lion",20);
SingleLinkedList1 singleLinkedList1 = new SingleLinkedList1();
singleLinkedList1.add(student2);
singleLinkedList1.add(student4);
singleLinkedList1.add(student1);
singleLinkedList1.add(student3);
singleLinkedList1.showInfo();
System.out.println("____________________");
System.out.println(getLength(singleLinkedList1.getHead()));
Student res = findLastIndexStudent(singleLinkedList1.getHead(),1);
System.out.println(res);
System.out.println("_____________________________");
ReverseList(singleLinkedList1.getHead());
singleLinkedList1.showInfo();
System.out.println("____________________________");
ReversePrint(singleLinkedList1.getHead());
}
public static int getLength(Student head) {
Student temp = head.next;
int length = 0;
if (head.next == null) {
System.out.println("这是一个空链表");
return 0;
}
while (temp != null) {
length++;
temp = temp.next;
}
return length;
}
class Student{
public int no;
public String name;
public int age;
public Student next;
public Student(int no,String name,int age){
this.no = no;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"no=" + no +
", name='" + name + '\'' +
", age=" + age +'\''+
'}';
}
}
class SingleLinkedList1{
private Student head = new Student(0,"",0);
public Student getHead(){
return head;
}
public void add(Student student){
Student temp = head;
boolean flag = false;
while (true){
if(temp.next == null){
break;
}
if(temp.next.no >student.no ){
break;
}else if(temp.next.no == student.no){
flag =true;
break;
}
temp=temp.next;
}
if(flag){
System.out.print("准备添加的 %d 已经存在,添加失败");
}else{
student.next =temp.next;
temp.next = student;
}
}
public void showInfo(){
if(head.next == null){
System.out.println("链表为空");
return;
}
Student temp = head.next;
while (true){
if(temp==null){
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}