数据结构:遍历一次获得链表的倒数第N个节点

来源:互联网 发布:淘宝上传图片 编辑:程序博客网 时间:2024/05/18 20:12

最近在学习链表中,发现一道题:
遍历一次链表,获得链表的倒数第N个节点

思路:    要想获得倒数第N个节点,就会不自然的想到,倒数第N个节点是正数第M-N+1个节点(假设链表长度是M),    这时候,我们以,M-N+1和M+1这两个节点为标准,一起向前遍历,直到M-N+1的节点为1,这时,M+1的节点为N+1.    我们将p1和p2分别替换上边的指针,且p1和p2之间相差n个节点。

这里写图片描述

    public void OnePass(int k){        Node p1=head;        Node p2=head;        int index=0;        while(p2!=null&&index<k){            p2=p2.next;            index++;        }        //这时候p2指针指向的是N+1的节点        while(p2!=null){            p2=p2.next;//p2一直指向链表的末尾            p1=p1.next;//相应的p1指向M-N+1的位置(倒数第N个节点)        }        System.out.println(p1.data);            }
0 0