题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路
三种思路
- 1、先算出链表总长度,然后正向寻找(len-k+1)
- 2、两个指针,让她们相隔k-1个单位,正向遍历,当跑得快的那个指针遇到null时,另一个指针的位置就是倒数第k个结点
- 3、递归,当
head.next
遇到null时,count开始记数,直到count = k
代码
对应第一个思路
public ListNode FindKthToTail(ListNode head,int k) {
ListNode temp = head;
int len = 0;
while(temp != null) {
temp = temp.next;
len++;
}
k = len - k + 1;
while((--k) != 0) {
if (head == null) return null;
head = head.next;
}
return head;
}
对应第二个思路
public ListNode FindKthToTail(ListNode head,int k) {
ListNode k1 = head, k2 = head;
int i = 0;
while(k1 != null) {
if (i >= k) {
k2 = k2.next;
}
k1 = k1.next;
i++;
}
if (i < k) return null;
return k2;
}
对应第三个思路
public int count = 0;
public ListNode FindKthToTail(ListNode head,int k) {
if (head == null) return null;
ListNode t = FindKthToTail(head.next, k);
this.count ++;
if (this.count == k) {
return head;
} else {
return t;
}
}