单链表倒数第K个节点的查找和显示

1.使用一个固定长度队列装链表段,当遍历到链表根时,返回队列头元素。

class Node{
    int value;
    Node next;
    public Node(int value){
        this.value=value;
    }
}
public class Danlianbiao {
    public static void main(String[] args) {
        Node node=new Node(1);
        Node node2=node.next=new Node(2);
        Node node3=node2.next=new Node(3);
        Node node4=node3.next=new Node(4);
        Node node5=node4.next=new Node(5);
        Node node6=node5.next=new Node(6);
        Node node7=node6.next=new Node(7);
        Node node8=node7.next=new Node(8);
        System.out.println(getLast(node, 9));
    }
    public static int getLast(Node node,int n){
        LinkedList<Integer> ll=new LinkedList<>();
        Node temp=node;
        while(true){
            if(temp.next==null){
                break;
            }else{
                ll.add(temp.value);
                if(ll.size()>n){
                    ll.removeFirst();
                }
                temp=temp.next;
            }
        }
        return ll.size()==0?temp.value:ll.get(0);
    }
}

 2.使用2个指针,一个指针用作查找最后的元素,另一个指针保持与前一个指针固定间距向前移动。当第一个指针到尾节点是,返回第二个指针指向的元素value;

    public static int getLast1(Node node,int n){
        Node temp=node;
        Node p=node;
        int  count=0;
        while(true){
            if(temp.next==null){
                break;
            }else{
                temp=temp.next;
                count++;
                if(count>=n){
                    p=p.next;
                }
            }
        }
        return p.value;
    }

猜你喜欢

转载自www.cnblogs.com/mryangbo/p/10798650.html