单链表输出倒数第k个元素java实现

单链表输出倒数第k个元素
简单粗暴直接思路:遍历两次,第一次遍历整个列表确定长度n,而倒数第k个即第n-k-1(注意起点为0)个,第二次遍历走n-k-1步即可获得答案。缺点:节点数量较多时,节点从硬盘到物理内存的读写是一个耗时操作。
巧妙的方法:定义两个指针,我们都知道倒数第k个距离最后一个的距离是k-1,所以可以先移动一个指针走k步后,然后两个指针同时移动,那么在快的指针到达结尾时,慢的指针到达的位置正好是倒数第k个。

//如何找出单链表中的倒数第k个元素

class Node{
  Node next=null;
  int data;
  public Node(int data){
    this.data=data;
  }
}

public class findKelem {
  public static Node method(Node head,int k) {
    if(k<0) {
      return null;
    }
    Node p1=head;
    Node p2=head;
    for(int i=0;i<k&&p1!=null;++i) {
      p1=p1.next;
    }
//    if(p1==null) {不注释掉这一部分在输出顺数第一个数据时会报数组越界
//      System.out.print("p1 is null!");
//      return null;
//    }
    while(p1!=null) {
      p1=p1.next;
      p2=p2.next;
    }
    if(p2 == null)
    	System.out.println(head.data);
    return p2;
  }


  public static void main(String[]args)
  {
    Node head = new Node(0);
    head.next = new Node(1);
    head.next.next = new Node(2);
    head.next.next.next = new Node(3);
    findKelem test = new findKelem();
    Node result = test.method(head, 1);
    System.out.println(result.data);
  }
 
}

猜你喜欢

转载自blog.csdn.net/cyanchen666/article/details/81908577
今日推荐