标签:编程 问题 scribe 移动 plist pre log while 特殊
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL || k==0) return NULL; ListNode *pAhead=pListHead; ListNode *pBehind=NULL; for(int i=1;i<k;i++){ pAhead=pAhead->next; if(pAhead==NULL) return NULL; } pBehind = pListHead; while(pAhead->next != NULL){ pAhead=pAhead->next; pBehind=pBehind->next; } return pBehind; }
考虑特殊用例,上面测试用例中的特殊输入,增加代码的鲁棒性。
当用一个指针遍历链表不能解决问题时,可以尝试两个指针或多个指针以不同步长移动以达到目的。
1.求链表的中间节点:定义两个指针,同时从头节点除法,一个一次走一个节点,一个一次走两个节点,走得快的指针走到末尾时,走得慢的指针指向中间节点。
2.判断一个单向链表是否形成了环形结构:和1的方法一样,若走的快的指针与走的慢的指针相遇,则有环,若走的快的指针已经到了末尾也没有追上走得慢的指针,则无环。
标签:编程 问题 scribe 移动 plist pre log while 特殊
原文地址:http://www.cnblogs.com/sjhome/p/7605532.html