- 题目:输入一个链表,输出该链表中倒数第K个节点;为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个结点。
- 题目分析:

- 代码如下:
public class LinkK {
public static LinkNode getReciprocalK(LinkNode linkNode,int k){
//头指针
LinkNode head=linkNode;
//与头指针相隔k的尾指针
LinkNode behind=null;
//让头指针与尾指针相隔距离为k
for (int i=0;i<k-1;i++){
head=head.next;
}
behind=linkNode;
//头指针和尾指针一同向下遍历,只到头指针到达链表尾节点
while (head.next!=null){
head=head.next;
behind=behind.next;
}
return behind;
}
public static void main(String[] args) {
LinkNode head1 = new LinkNode(1);
LinkNode head2 = new LinkNode(2);
LinkNode head3 = new LinkNode(3);
LinkNode head4 = new LinkNode(4);
LinkNode head5 = new LinkNode(5);
head1.next=head2;
head2.next=head3;
head3.next=head4;
head4.next=head5;
LinkNode reciprocalK = getReciprocalK(head1, 4);
System.out.println(reciprocalK.data);
}
}
github代码地址;https://github.com/iot-wangshuyu/offer/tree/master/code/src/linkK
本文介绍了一种高效算法,用于找到链表中倒数第K个节点,通过双指针技巧实现,先让一个指针前进K步,然后两个指针同步移动直至前指针到达链表尾部,此时后指针所指即为所求节点。
135

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



