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; }