1.快慢指针
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {ListNode* fast = pListHead, *slow = pListHead;for(int i = 0;i < k;i++){if(!fast)return NULL;fast = fast->next;}while(fast){fast = fast->next;slow = slow->next;}return slow;}
(1)k为0
(2)结点为空
(3)k比结点数大
引申题
1.求链表的中间结点。如果总数为奇数,返回中间结点;如果为偶数,返回中间两个结点任意一个
思路:定义两个指针,一个一次走一步,另一个一次走两步
2.判断一个单向链表是否形成了环形结构
思路:定义两个指针,一个一次走一步,另一个一次走两步,快指针追上慢指针,则为环形结构;快指针走到了链表尾也没有追到慢指针,则不是
