思路,倒数第N个元素,遍历链表,构造两个指针。
第一个从头先遍历N个节点,然后停下来。
第一个接着继续遍历,第二个从头开始遍历(同时遍历),直到第一个遍历到null为止。
这时第二个指针所在的位置就是倒数第N个元素的位置。
public class BackNNode {
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static void main(String[] args) {
ListNode l1 = new ListNode(1);
ListNode l2 = new ListNode(2);
ListNode l3 = new ListNode(3);
ListNode l4 = new ListNode(3);
ListNode l5 = new ListNode(4);
ListNode l6 = new ListNode(4);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
l5.next = l6;
getbackNword(l1,2);
System.out.println("原始链表元素如下:");
while(l1!= null){
System.out.print(l1.val);
l1 = l1.next;
}
}
public static void getbackNword(ListNode head,int n){
ListNode p1=head;
ListNode p2=head;
for(int i=0;i<n-1;i++){
p2=p2.next;
}
while(p2.next!=null){
p1=p1.next;
p2=p2.next;
}
System.out.println("倒数第"+n+"个元素是"+p1.val);
}
}