最近在学习链表中,发现一道题:
遍历一次链表,获得链表的倒数第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);
}