题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路如下:
1.最容易想到的解法,先计算总的节点数,然后一个一个的往后走,知道倒数第K个,java代码如下:
public class ListNodeK {
public ListNode FindKthToTail(ListNode head, int k) {
if (head == null)
return null;
ListNode node = head;
int count = 0;// 链表总的节点数
while (node != null) {
count++;
node = node.next;
}
if (count < k) {
return null;
}
ListNode node2 = head;
for (int i = 0; i < count - k; i++) {
node2 = node2.next;
}
return node2;
}
}
2.
两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指针+走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。
public class ListNodeK2 {
public ListNode FindKthToTail(ListNode head, int k) {
if (k <= 0)
return null;
ListNode node1 = head;
ListNode node2 = head;
for (int i = 0; i < k; i++) {
if (node2 == null)
return null;
node2 = node2.next;
}
if (node2 == null)
return null;
while (node2.next != null) {
node1 = node1.next;
node2 = node2.next;
}
return node1;
}
}