有两种方式,使用递归和非递归
算法一(非递归方式):
最简单的方式是从头开始遍历。
算法二(递归方式)
打印出第k个元素的值。
public static int nthToLast(LinkedListNode head,int k){
if(head == null){
return 0;
}
int i=nthToLast(head.next,k)+1;
if(i==k){
System.out.println(head.data);
}
return i;
}
算法三(迭代法):
一种效率更高,但不太直观的解法。
LinkedListNode nthToLast2(LinkedListNode head, int k) {
if (k <= 0) {
return null;
}
LinkedListNode p1 = head;
LinkedListNode p2 = head;
//p2向前移动k个结点
for(int i=0;i<k-1;i++){
if(p2.next==null){
return null;
}
p2 = p2.next;
}
if(p2==null){
return null;
}
/*现在以相同的速度移动p1和p2,当p2抵达链表末尾时*/
/*p1刚好指向第k个元素*/
while(p2.next!=null){
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
本文介绍了两种查找链表中倒数第K个元素的方法:递归法与迭代法。递归法通过后序遍历找到目标节点并返回其值;迭代法则采用双指针策略,先让一个指针前进K步,再同步移动两个指针直至前导指针到达链表尾部。
4660

被折叠的 条评论
为什么被折叠?



