要求:
输入一个链表,输出该链表中倒数第K个节点。
思路:
链表中倒数第K个节点也就是正数第(L-K+1)个节点。
首先两个节点/指针,一个节点node1先开始跑,指针node1跑到(k-1)个节点后,另一个节点node2开始跑,当node1跑到最后时,node2所指的节点就是倒数第K个节点也就是正数第(L-K+1)个节点。
代码:
public ListNode FindKthToTail(ListNode head, int k) {
//如果链表为空或者k小于等于0
if (head == null || k <= 0) {
return null;
}
//声明两个指向头节点的节点
ListNode node1 = head, node2 = head;
//记录节点的个数
int count = 0;
//记录k值,后面要使用
int index = k;
//p指针先跑,并且记录节点数,当Node1节点先跑了k-1个节点后,node2开始跑
//当node1节点跑到最后的时候,node2节点所指的节点就是倒数第k个节点。
while (node1 != null) {
node1 = node1.next;
count++;
if (k < 1) {
node2 = node2.next;
}
k--;
}
if (count < index) {
return null;
}
return node2;
}