思路,倒數第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);
}
}