package LianBiao;
/*
* 找出倒数第k个节点:
* 思路:
* 定义两个指针A,B,先让间隔为0,之后让指针B向后移,
* 到AB距离等于k,在一起向后移动,知道B为空,
* A所指的值就是倒数第k个节点的值*/
public class 找出倒数第k个节点 {
/*定义一个节点*/
public static class Node{
Node next;
Object value;
//构造带参数的构造方法
public Node(Object value) {
this.value = value;
}
}
public static Node find(Node head, int k) {
if(head==null || k<=0){
return null;
}
Node p1=head;
Node p2=head;
int c=0;
while(p2!=null && c<k){
p2=p2.next;
c++;
}
if(c<k){ //如果执行完上面循环,c还是小于k,说明你输入的k越界了
return null;
}
while (p2!=null){ //当p1,p2之间的距离=k后,二者一起向后移,直到p2为空
p1=p1.next;
p2=p2.next;
}
return p1; //将p1返回
}
public static void main(String[] args) {
//先定义一个数组
int arr[] ={6,7,3,8,9};
//将数组中的数据赋值给链表
Node head=new Node(null); //创建一个哑元
Node p=head; //注意p不能等于head.next 那样会空指针异常
for (int i = 0; i <arr.length ; i++) {
p.next=new Node(arr[i]); //创建新的节点并赋值
p=p.next;
}
Node node1 = find(head, 1);//找出倒数第二个节点
System.out.println(node1.value);
Node node2 = find(head, 2);//找出倒数第二个节点
System.out.println(node2.value);
Node node3 = find(head, 3);//找出倒数第二个节点
System.out.println(node3.value);
Node node4 = find(head, 4);//找出倒数第二个节点
System.out.println(node4.value);
Node node5 = find(head, 7);
System.out.println(node5.value); //抛出空指针异常
}
}
找出倒数第k个节点
最新推荐文章于 2023-04-14 15:43:27 发布