1. 程式人生 > >輸出連結串列中倒數第k個結點

輸出連結串列中倒數第k個結點

設定2個指標:fast和slow都指向頭結點,fast先移動k-1步,判斷是否到達連結串列尾部,若到達,說明k不合法;然後fast和slow同時移動,迴圈直到先行的指標值為NULL值,另一個指標所指的位置就算要查詢的位置

public class FindK {
    public static void main(String[] args){
        Node n1=new Node(5);
        Node n2=new Node(3);
        Node n3=new Node(9);
        Node n4=new Node(2);
        n1.next=n2;
        n2.next=n3;
        n3.next=n4;
        Node n=new FindK().findK(n1,2);
        System.out.println(n.data);

    }
    public Node findK(Node head,int k){
        if(head==null||k<1)
            return null;
        Node p=head;
        Node q=head;
        for(int i=0;i<k-1&&p!=null;i++){//前移k-1步
            p=p.next;
        }
        if(p==null) {
            System.out.println("k不合法");
            return null;
        }
        while(p.next!=null){//同時後移
            p=p.next;
            q=q.next;
        }
        return q;

    }
}