问题:给定链表,输出链表中倒数第K个节点
思路:
相当于用一把长度为K的尺子,尺子头部与链表头对齐,
每次移动一个单位距离,当尺子尾部与链表尾部对齐时,寻找的节点即为尺子头部对准的节点
即:构造两个节点p&q,令p指向第一个节点,q指向第k个节点,
同时移动p&q,直到q指向链表最后一个节点,此时倒数第K个节点即为p
思路:
相当于用一把长度为K的尺子,尺子头部与链表头对齐,
每次移动一个单位距离,当尺子尾部与链表尾部对齐时,寻找的节点即为尺子头部对准的节点
即:构造两个节点p&q,令p指向第一个节点,q指向第k个节点,
同时移动p&q,直到q指向链表最后一个节点,此时倒数第K个节点即为p
LNode* FindKthToTail(LNode *Head, int k) {
if(Head == NULL || k <= 0) return NULL; //不合法情况:链表为空 or k小于等于0
LNode *p, *q; //构造两个结点,都指向Head
p = q = Head;
for(int i = 1; i < k; i ++) { //另结点q指向第k个结点(尺子长度为k)
if(q->next == NULL) return NULL; //不合法情况:k大于链表长度
q = q->next;
}
while(q->next) { //同时移动两个结点,直至q指向链表最后一个结点
p = p->next;
q = q->next;
}
return p; //p即为倒数第k个结点
}