题目
输入一个链表,输出该链表中倒数第k个结点。
解题思路
能想到的最直接的解法就是输出该链表的第(n-k+1)个节点,不过这里有一个问题:需要先求出链表的长度,也就是n,那么这个算法就需要遍历整个链表两次。
还有一种解法如下:
设置两个指针ahead、behind,顾名思义,ahead指针在前,behind指针在后,前后相差k-1,这样当ahead到达链表的末尾是,behind正好位于倒数第k个,那么输出behind节点就行了。
代码
if (head==null || k==0) {
return null;
}
ListNode ahead=head;
ListNode behind = head;
for (int i = 1; i < k; i++) { //这里要注意一个篱笆庄问题,i不是从0开始
if (ahead.next!=null) {
ahead = ahead.next;
}
}
while (ahead.next!=null) {
ahead=ahead.next;
behind = behind.next;
}
return behind;