题目描述:
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。
如果该链表长度小于k,请返回一个长度为 0 的链表。
解题思路:
常规思路是先求出链表的总长度n,然后判断k与n的关系,若k>n,则直接返回,否则从前往后遍历n-k个元素即可得到最终结果;
另一个思路是利用双指针,也就是快慢指针,让快指针先移动k个元素,然后再一起移动。
代码实现:
public ListNode FindKthToTail(ListNode pHead, int k) {
ListNode fast = pHead;
ListNode slow = pHead;
for (int i = 0; i < k; i++) {
if (fast != null) { // 这里注意需要判断
fast = fast.next;
} else return slow = null;
}
while (fast != null) {
slow = slow.next;
fast = fast.next;
}
return slow;
}
总结:
1、链表的题目大多需要额外再创建两个新的链表做辅助?
2、做此类题的时候要注意一些循环的条件中是用的结点当前非空还是下一个结点不为空作为判断条件,以及最后的返回结果是当前结点还是下一个结点。