—>双指针,快指针fast与慢指针slow,查找倒数k则在fast领先slow
k步然后再同时移动,则在fast为空时slow则是K所对应的
public void FindK(int K){
LinkHeadNode fast = head;//快指针
LinkHeadNode slow = head;//慢指针
for (int i = 0; i < K; i++) { //快指针fast先移动K步
fast = fast.next;
}
while (fast!=null){ //同时移动,并在fast为空时找到
fast = fast.next;
slow = slow.next;
}
System.out.println(slow);
}
}```
测试类:
```java
//结点类
class LinkHeadNode{
public int num;
public String name;
public LinkHeadNode next;
public LinkHeadNode(int num, String name) {
this.num = num;
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "LinkHeadNode{" +
"num=" + num +
", name='" + name + '\'' +
'}';
}
}```
//链表类
class Student{
private LinkHeadNode head = new LinkHeadNode(0,"");
//创建链表
public void add(LinkHeadNode headNode){
LinkHeadNode temp = head;
while (true){
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = headNode;
}
// 显示链表
public void list(){
if (head.next == null) {
System.out.println("Null");
return;
}
LinkHeadNode temp = head.next;
while (true){
if (temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}