先做做一些简单题找找手感,还有赞一个牛客的OJ,这样的提交方式很好,ACM那种对输入出处格式对于没有接触过ACM的人来说比较头疼,华为OJ那种格式描述不清楚的就更头疼了,卡在输入输出上就悲剧了,当然,输入输出也是需要了解的。
顺便吐槽一下华为SO挑战赛:题意有模糊的地方,挑战赛的题目没有区分度,作弊监管太松,判分规则未公开说明。
题目描述:输入一个链表,输出该链表中倒数第k个结点。
题目解析:设两个同步后移、相距k的指针就行,前面的指针触底,后面的指针即是倒数k个节点。
代码如下:
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { 12 if(k == 0 || pListHead == NULL) return NULL; 13 ListNode* pFrontNode = pListHead; 14 ListNode* pBehindNode = pListHead; 15 while(--k) { 16 if(pFrontNode->next) pFrontNode = pFrontNode->next; 17 else return NULL; 18 } 19 while(pFrontNode->next) { 20 pFrontNode = pFrontNode->next; 21 pBehindNode = pBehindNode->next; 22 } 23 return pBehindNode; 24 } 25 };
原文:http://www.cnblogs.com/excavator/p/4824543.html